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

1427

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

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


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

9

只需运行此命令。不要忘记将portnumber替换为您的端口号 ;)

  kill -9 $(sudo lsof -t -i:portnumber)

大多数情况下,Mac 不需要使用 sudo。 - Aditya Parmar

7

kill -9 `fuser 8080/tcp|xargs -n 1`命令可以杀死监听TCP连接端口8080的进程。

请注意,该命令会删除所有与该端口相关的进程,请谨慎使用。

6
sudo apt-get install psmisc (or sudo yum install psmisc)
sudo fuser 80/tcp

结果: 80/tcp:1858、1867、1868、1869、1871

逐个杀死进程

kill -9 1858


6
这是Windows系统的解决方案:
C:\Users\Niroshan>netstat -ano|findstr "PID :8080"

Proto Local Address Foreign Address State PID
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 18264

taskkill /pid 18264 /f

2
这个问题涉及到Linux。 - Robert

5

我正在处理一个Yocto Linux系统,该系统可用的Linux工具集非常有限。我想要停止使用特定端口(1883)的进程。

首先,为了查看我们正在监听哪些端口,我使用了以下命令:

root@root:~# netstat -lt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
tcp        0      0 0.0.0.0:hostmon         0.0.0.0:*               LISTEN      
tcp        0      0 localhost.localdomain:domain 0.0.0.0:*               LISTEN      
tcp        0      0 0.0.0.0:9080            0.0.0.0:*               LISTEN      
tcp        0      0 0.0.0.0:1883            0.0.0.0:*               LISTEN      
tcp        0      0 :::hostmon              :::*                    LISTEN      
tcp        0      0 localhost:domain        :::*                    LISTEN      
tcp        0      0 :::ssh                  :::*                    LISTEN      
tcp        0      0 :::1883                 :::*                    LISTEN      

接下来,我通过以下方式找到了使用1883端口的进程名称:

root@root:~# fuser 1883/tcp
290 
root@root:~# ps | grep 290
  290 mosquitt 25508 S    /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
12141 root      8444 S    grep 290

从上面可以看到,使用端口1883的是程序/usr/sbin/mosquitto

最后,我杀掉了该进程:

root@root:~# systemctl stop mosquitto

我使用了systemctl,因为在这种情况下它是一个systemd服务。


4
  1. 首先检查进程 netstat -lt
  2. 检查进程ID fuser <端口号>/tcp
  3. 关闭运行在该端口上的进程 kill <进程ID>

3

这些命令对我有效:

ps -aux | grep 8000

然后:

sudo kill <PID>

ps -aux 包括以下标题,而端口不是其中之一: 用户 进程ID %CPU %MEM 虚拟内存 实际内存 终端 状态 启动时间 执行命令 - Ryan Chen

3

使用 Git Bash 的另一种方式:

stopProcessByPortNumber() {
port=":${1}"
portStrLine="$(netstat -ano | findstr LISTENING | findstr $port)"
processId="$(grep -oP '(\d+)(?!.*\d)' <<< $portStrLine)"
echo $processId
taskkill -PID $processId -F
}

3

在我的情况下,CentOS 在建议的答案中存在一些问题。因此我使用了以下解决方案:

  ss -tanp | grep 65432 | head -1 | grep -Po "(?<=pid=).*(?=,)" | xargs kill

2

这对我在Mac上有效

sudo kill -9 $(netstat -vnap tcp | grep PORT | awk -F " " '{print $9}')

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