如何在Linux上终止运行在特定端口的进程?

1427

我尝试使用来自tomcat /bin目录的./shutdown.sh关闭Tomcat,但发现服务器未能正确关闭。因此,我无法重新启动。
我的Tomcat正在端口8080运行。

我想杀掉在8080端口运行的Tomcat进程。我首先想获取在特定端口(8080)上运行的进程列表,以便选择要终止的进程。


3
可能是与“shell脚本:如何杀掉占用3000端口的进程?”类似的问题。 - Ciro Santilli OurBigBook.com
35个回答

2

在@veer7所说的基础上,如果你想知道端口上有什么,请在关闭之前执行以下操作。

$ sudo netstat -plten |grep java
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      1000       906726      25296/java      
tcp6       0      0 :::8009                 :::*                    LISTEN      1000       907503      25296/java      
tcp6       0      0 :::8080                 :::*                    LISTEN      1000       907499      25296/java      
$ ps 25296
  PID TTY      STAT   TIME COMMAND
25296 ?        Sl     0:16 /usr/lib/jvm/java-8-openjdk-amd64/bin/java -Dcatalina.base=/hom

使用“ps”命令和netstat返回的进程号。

1
使用这个脚本比其他选项更加用户友好,并且检查端口是否真的在使用。
用法:openport 1234
openport() {
  # sed = second line https://dev59.com/8nM_5IYBdhLWcg3wUxVB#1429628
  # 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
}

1
如何在端口上的服务未响应时终止进程。
timeout 1 telnet localhost 8080 2>&1 | if grep -q 'Unable'; then sudo kill -9 $(sudo lsof -t -i:8080); fi

它是什么

  1. 开始一个一秒的“超时”,以使telnet退出
  2. ' 2>&1 | ' 管道错误消息而不退出
  3. 如果错误消息包含“无法”,则运行代码以杀死锁定端口8080的进程

这可以放置在文件中,并定期从'sudo crontab'运行


0

-1
在 Windows 中,它将是 netstat -ano | grep "8080",然后我们得到以下消息:TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 10076 我们可以使用 taskkill /F /PID 10076 来终止 PID。

2
问题明显是在寻求Linux的帮助,而不是Windows。 - babycakes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接