我尝试在tomcat /bin目录下使用。/shutdown.sh关闭tomcat。但发现服务器没有正确关闭。因此我无法重新启动我的tomcat运行在端口8080上。

我想终止在8080上运行的tomcat进程。我首先想要在特定端口(8080)上运行的进程列表,以便选择要终止哪个进程。


当前回答

一个班轮,节省时间

kill -9 $(lsof -t -i tcp:8080)

此处解释:使用lsof和kill的组合

root@localhost:~# lsof -i tcp:8080
COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
java    23672 sine  238u  IPv6 3028222      0t0  TCP localhost:http-alt (LISTEN)

选择pid并使用kill

kill 23672

其他回答

使用这个脚本,它比其他选项更友好,检查端口是否实际在使用。

使用方法:openport 1234

openport() {
  # sed = second line https://stackoverflow.com/a/1429628/152711
  # awk = second word https://unix.stackexchange.com/a/174038
  processId=$(lsof -i tcp:$1 | sed -n 2p | awk '{print $2}')
  if [ ! -z "$processId" ] # Non-null https://www.cyberciti.biz/faq/bash-shell-find-out-if-a-variable-has-null-value-or-not/
  then
    echo Killing $processId
    kill -9 $processId
  else
    echo No process found
  fi
}

只有以下命令对我有用:

ps -aux | grep 8000

然后:

sudo kill <PID>

获取任务的PID并终止它。

lsof -ti:8080 | xargs kill

在Windows中,它将是netstat -ano | grep "8080",我们得到以下消息TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 10076

我们可以使用taskkill /F /PID 10076来终止PID

列出监听端口8080的所有进程:

lsof -i:8080

杀死任何监听8080端口的进程:

kill $(lsof -t -i:8080)

或者更激烈:

kill -9 $(lsof -t -i:8080)

(-9对应SIGKILL -立即终止/硬杀信号:参见kill信号列表和kill命令中-9选项的用途是什么?如果没有指定要终止的信号,则发送TERM信号,即-15或软终止,这有时不足以终止进程。