如何查找(杀死)在某个端口上运行的进程?[重复]


30

可能重复:
查找在Linux中使用某个端口的进程

我正在使用Ubuntu Linux 11.04。我该如何编写一个Shell脚本表达式来查找在端口4444上运行的进程,然后终止该进程?


我不认为这是重复的,因为它询问如何杀死而不是找到端口上的进程:fuser -k 9000 / tcp
Kris

Answers:



7

您使用lsof

# lsof -n | grep TCP | grep LISTEN | grep 4444

输出将类似于:

pname 16125 user 28u IPv6 4835296 TCP *:4444 (LISTEN)

其中第一列是进程名称,第二列是进程ID。然后,您解析输出,找出什么是进程ID(PID),然后使用kill命令将其杀死。


1
我以前从未听说过lsof。查看手册页,它似乎非常有用。谢谢!

linux中的所有内容都是文件,而lsof则可以让您查找文件,所以...是的,非常有用
jcollum

2

或者,您可以使用netstat -apif lsof在您的系统上不可用(因为它在我经常使用的busybox系统上不可用)。


好电话,我想知道为什么这在我正在处理的busybox派生的docker镜像上不起作用
jcollum

2
kill -9 `netstat -lanp --protocol=inet | grep 4444 | awk -F" " '{print $7}' | awk -F"/" '{print $1}'`

使用netstat列出带有数字端口和父进程的侦听INET套接字。过滤字符串4444,取出第7列(pid /进程名),然后再用“ /”将其拆分以获取pid。将其传递给杀死命令。


2
我建议反对杀-9。它不允许清除,并且某些Internet应用程序更可能具有需要彻底关闭的资源。
Rich Homolka
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.