杀死在端口 80 上运行的进程

杀死在端口 80 上运行的进程

这是我想杀死的进程:

sooorajjj@Treako ~/Desktop/MerkMod $ sudo netstat -tunap | grep :80
tcp6    0   0 :::80   :::*     LISTEN    20570/httpd

答案1

有多种方法可以查找哪个正在运行的进程正在使用端口。

使用 fusionr 它将给出与侦听端口关联的多个实例的 PID。

sudo apt-get install psmisc
sudo fuser 80/tcp

80/tcp:               1858  1867  1868  1869  1871

找到后,您可以停止或终止该进程。

您还可以使用 lsof 查找 PID 和更多详细信息

sudo lsof -i tcp:80

COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME  
nginx   1858     root    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1867 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1868 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1869 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1871 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  

限制套接字在端口 80 上(而不是连接到端口 80 的客户端):

sudo lsof -i tcp:80 -s tcp:listen

自动杀死它们:

sudo lsof -t -i tcp:80 -s tcp:listen | sudo xargs kill

答案2

这是一个显示要运行的命令的单行代码:

echo kill $(sudo netstat -anp | awk '/ LISTEN / {if($4 ~ ":80$") { gsub("/.*","",$7); print $7; exit } }')

替换echosudo实际要终止的进程。

答案3

提供了列出开放端口的三个选项杰什whatisonport:

netstat -anp --numeric-ports | grep ":${PORT}\>.*:" 

fuser -v "${PORT}"/tcp

lsof -P -S 2 -i "tcp:${PORT}" | grep "\(:${PORT}->.*:\|:$PORT (LISTEN)$\)"

我更喜欢它,netstat因为它快速、简洁,并且可以列出其他用户打开的端口。 (尽管它仍然需要超级用户/用户权限来列出此类进程的名称和 PID。)

输出

$ netstat -anp --numeric-ports | grep ":80\>.*:" 
tcp6       0      0 :::80           :::*            LISTEN      1914/apache2    

$ fuser -v "80/tcp"
                     USER        PID ACCESS COMMAND
80/tcp:              root       1914 F.... apache2
                     www-data  12418 F.... apache2
...

$ lsof -P -S 2 -i "tcp:80" | grep "\(:80->.*:\|:80 (LISTEN)$\)"
apache2  1914     root    4u  IPv6   11920      0t0  TCP *:80 (LISTEN)
apache2 12418 www-data    4u  IPv6   11920      0t0  TCP *:80 (LISTEN)
...

在两种情况下的使用grep是仅匹配本地端的端口,并跳过与远程端口 80 的打开连接。(另一种方法是使用-lwithnetstat或 withlsof来使用-sTCP:LISTEN,但我喜欢上面的 grep,因为它们会还赶上外向的連接给定的端口,有时可能会引起兴趣。)

随着lsof我们使用-P显示:80而不是:http使 grep 成为可能。该-S 2选项强制lsof及时完成。

杀死进程

假设我们想使用netstat,我们可以像这样获取 PID:

$ netstat -anp --numeric-ports | grep ":80\>.*:" | grep -o "[0-9]*/" | sed 's+/$++'
1914
...

我们甚至可以将这些 PID 传递给kill

... | xargs -d '\n' kill -KILL

然而,使用正则表达式时通常有可能出现误报,因此我建议仅查看初始输出,netstat然后手动决定是否运行:

$ kill -KILL 1914

也可以看看

我有另一个脚本叫listopenports这可能是有趣的。

答案4

有一个简单的方法可以做到这一点。首先检查哪个进程正在使用端口 80网络统计:

netstat -ntl | grep 80

现在您获得了进程名称并使用以下命令终止该进程全杀命令:

killall -9 process name

相关内容