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

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


当前回答

首先你需要做的是运行(替换为你的端口号):

fuser -k 3000/tcp

这将释放端口。运行上述命令后,执行以下命令:

service docker restart

你的问题解决了。

其他回答

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

lsof -i:8080

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

kill $(lsof -t -i:8080)

或者更激烈:

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

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

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

使用方法: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
}

使用命令

 sudo netstat -plten |grep java

使用grep Java作为tomcat使用Java作为他们的进程。

它将显示带有端口号和进程id的进程列表

tcp6       0      0 :::8080                 :::*                    LISTEN      
1000       30070621    16085/java

“/java”前面的数字是进程号。现在使用kill命令终止进程

kill -9 16085

-9表示进程将被强制终止。

这将杀死端口80上运行的程序

sudo fuser -k 80/tcp

选择端口号并应用netstat命令中的grep,如下所示

netstat -ap | grep :7070

控制台输出

tcp 0 0:::7070:::* LISTEN 3332/java

根据PID(进程标识号)终止服务

kill -9 3332