如何根据端口查找进程并将其全部杀死? [复制]

Posted

技术标签:

【中文标题】如何根据端口查找进程并将其全部杀死? [复制]【英文标题】:How to find processes based on port and kill them all? [duplicate] 【发布时间】:2011-06-29 22:50:29 【问题描述】:

根据端口号查找进程并将其全部杀死。

ps -efl | grep PORT_NUMBER | kill -9 process_found_previously

如何补完最后一栏?

【问题讨论】:

【参考方案1】:

ps -efl | grep PORT_NUMBER 的问题在于,PORT_NUMBER 也可能与ps 输出中的其他列匹配(日期、时间、pid,...)。如果由 root 运行,可能会导致杀戮!

我会这样做:

PORT_NUMBER=1234
lsof -i tcp:$PORT_NUMBER | awk 'NR!=1 print $2' | xargs kill 

命令分解

(lsof -i tcp:$PORT_NUMBER) -- 列出所有正在侦听该 tcp 端口的进程 (awk 'NR!=1 print $2') -- 忽略第一行,打印每行的第二列 (xargs kill) -- 将结果作为参数传递给kill。可能有几个。

【讨论】:

Fuser(下)更简单 这很棒。现在有一个可爱的小别名:killport() lsof -i tcp:$1 | awk 'NR!=1 print $2' | xargs kill 通过端口杀掉现在只是一个写作的例子,例如:killport 3984 看看下面 DanS 的回答 (***.com/a/12295745/67824)。如果您使用完全用于此目的的 -it 选项,则可以不使用 awk-t 指定 lsof 应仅生成带有进程标识符且没有标题的简洁输出 - 例如,以便输出可以被管道杀死(1)。。不用说,这将是一种更好、更可靠的方法。 谁能提供一个我们可以在涉及多个端口时使用的特技,例如当 nginx 在多个端口上运行 100 个进程时。谢谢。 只是一个补充:A=1234; B=4567; lsof -i tcp:$A -i tcp:$B -t | xargs kill 【参考方案2】:

1.) lsof -w -n -i tcp:8080

2.) kill -9 processId

【讨论】:

这里说了很多次了,不要用kill -9,试试kill或者用kill -15 SIGTERM 什么,如果不行,最后用kill -9强制。跨度> 【参考方案3】:
kill $( lsof -i:6000 -t )

或者如果您需要权限:

sudo kill $( sudo lsof -i:6000 -t )

【讨论】:

这在大多数情况下都有效,但似乎存在多个进程可以在同一个端口上侦听的边缘情况,上面的方法将失败:***.com/questions/1694144/…。 我让 nginx 在同一个端口上运行多个进程。 (+1) 那里有很好的答案。我想知道如何在它之前添加一个测试条件。我的意思是,我想首先检查端口是否实际被进程使用。因此,脚本将类似于:test <check if the port 6000 is being used> && kill $( lsof -i:6000 -t )。任何建议都会有所帮助。【参考方案4】:

建议使用 fuser 命令:

fuser -k -TERM -n tcp $PORT_NUMBER

【讨论】:

这其实是最好的答案。当您可以简单地使用现有实用程序时,为什么还要麻烦管道命令? 这个 fuser 命令在 Mac OS X 中不起作用,但 Shawn 的 lsof 命令可以 :) 我的实际命令是:fuser -k -TERM $PORT/tcp 请参阅下面的@Cryptopat response【参考方案5】:
sudo fuser -k 8080/tcp

一个容易记住的。

此语法可能比问题的日期更新!

【讨论】:

【参考方案6】:
... | awk ' print $4 ' | xargs kill -9

请在运行前使用“echo”而不是“kill”进行测试

【讨论】:

请不要kill -9 partmaps.org/era/unix/award.html#uuk9letter @NathanKidd 链接是德语 >_> @NathanKidd 该链接已失效,但这里有一个关于它的 SO 讨论 ***.com/questions/690415/…。【参考方案7】:

杀死所有侦听特定端口的进程,例如8864端口

kill -9 $ \`lsof -i:8864 -t\`

用你想要的端口替换 8864。

【讨论】:

以上是关于如何根据端口查找进程并将其全部杀死? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

linux下怎么根据端口号杀死进程?

window10解决端口占用

linux杀死进程怎么一下子全部杀死

Linux系统根据端口号来查看其进程并杀死进程

cmd中如何解决端口冲突问题

windows查看端口号占用,查看/杀死占用端口号的程序