终止链接到端口的所有进程

终止链接到端口的所有进程

终止端口 3000 上的所有进程。这是尝试的方法:

ubuntu@111:~/chatapp$ sudo netstat -peanut|grep 3000
tcp6       0      0 :::3000                 :::*                    LISTEN      0          632007      18200/node      
ubuntu@111:~/chatapp$ sudo kill 18200
ubuntu@111:~/chatapp$ sudo netstat -peanut|grep 3000
tcp6       0      0 :::3000                 :::*                    LISTEN      0          632207      18349/node      
ubuntu@111:~/chatapp$ sudo killall node
ubuntu@111:~/chatapp$ sudo netstat -peanut|grep 3000
tcp6       0      0 :::3000                 :::*                    LISTEN      0          632364      18414/node      
ubuntu@111:~/chatapp$ 

答案1

您可以使用以下命令来获取pid

sudo netstat -peanut | grep 3000 | awk '{ print $9 }' | sed 's:/[^/]*$::' | grep -Eo '[0-9]{1,5}'

awk命令获取第 9 个字段。

sed命令获取pid前面的斜杠。

并且 grep 命令只返回数字以消除多余的行。

在这里您可以简单地进行循环并终止进程。

答案2

某些程序除非使用 sudo 运行,否则不会显示netstat。比较以下两次运行:

$ netstat -natp | grep tcp6                                                                           
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp6       0      0 :::25                   :::*                    LISTEN      -               
tcp6       0      0 :::445                  :::*                    LISTEN      -               
tcp6       0      0 :::139                  :::*                    LISTEN      -               
tcp6       0      0 :::22                   :::*                    LISTEN 



$ sudo netstat -natp | grep tcp6                                                                      
[sudo] password for xieerqi: 
tcp6       0      0 :::25                   :::*                    LISTEN      1522/master     
tcp6       0      0 :::445                  :::*                    LISTEN      770/smbd        
tcp6       0      0 :::139                  :::*                    LISTEN      770/smbd        
tcp6       0      0 :::22                   :::*                    LISTEN      1190/sshd 

至于终止与端口本身相关的进程,这只是解析输出netstat(awk 可以做到)并将该命令的输出通过管道传输到的简单情况xargs -I {} kill -TERM {}

以下是如何使用 解析输出awk。默认情况下,awk 使用空格将输出拆分为字段,因此我必须循环遍历所有字段(由于存在多个空格,awk 认为实际文本之间存在多个字段)。

$ sudo netstat -natp | awk '/:53579/{sub(/\//," ");for(i=1;i<=NF;i++){\                                    
> if($i~/ESTABLISHED/||/LISTEN/||/CLOSE WAIT/) print $(i+1)}}'                                                        
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
5027

剩下的就只是

that_command_above | xargs -I {} kill -TERM  {}

答案3

使用 killport

可以从这里下载 killport,使用以下命令:

wget https://raw.githubusercontent.com/abdennour/miscs.sh/master/killport

sh killport 3000

其他方法可以使用这个:

sudo kill -9 3000

相关内容