确定进程pid在特定端口上的侦听


101

如标题所示,我正在运行多个游戏服务器,每个服务器都有相同name但不同PIDport编号。我想匹配PID正在某个端口上监听的服务器的,然后我想终止该过程。我需要它来完成我的bash脚本。

那有可能吗?因为它尚未在网络上找到任何解决方案。

Answers:


125

-p标志netstat为您提供过程的PID:

netstat -l -p

编辑:在FreeBSD中获取套接字用户的PID所需的命令是sockstat。正如我们在与@Cyclone进行讨论期间所得出的那样,执行此操作的行是:

sockstat -4 -l | grep :80 | awk '{print $3}' | head -1

2
netstat: 80: unknown or uninstrumented protocol使用80(nginx)端口测试目的。没用。
飓风

5
尝试netstat -nlp | grep :80代替
stanwise

12
netstat: option requires an argument -- p
飓风

2
@jasonbrittain在Cygwin上,netstat称为Windows native 。它具有其他语法。
stanwise 2012年

2
这个答案是错误的:netstat:选项需要一个参数-p
好人

143

可以传递给kill命令的简短版本:

lsof -i:80 -t

13
这也包括在该端口上连接的进程。 lsof -i4TCP:80 -sTCP:LISTEN -t可能正是您想要的。
奈维尔,2016年

正是我想要的。我想通过搜索运行端口来杀死该进程。
mythicalcoder

@Nevir您的意思是“还包括在该端口上连接的进程”?你能解释一下吗?
kishorer747

2
kill -9 `lsof -i:80 -t`为了便于复制
bmjrowe

17

netstat -p -l | grep $PORTlsof -i :$PORT 解决方案都不错,但我更喜欢fuser $PORT/tcp使用POSIX扩展语法(适用于coreutils),就像使用管道一样:

pid=`fuser $PORT/tcp`

它会打印纯pid,因此您可以放弃sed魔术。

使fuser我的爱好者工具产生影响的一件事是能够直接向该进程发送信号(此语法也是POSIX的扩展):

$ fuser -k $port/tcp       # with SIGKILL
$ fuser -k -15 $port/tcp   # with SIGTERM
$ fuser -k -TERM $port/tcp # with SIGTERM

FreeBSD也支持-k:http ://www.freebsd.org/cgi/man.cgi?query=fuser


1
融合

10

netstat -nlp 应该告诉您PID在哪个端口上监听。


1
netstat: 80: unknown or uninstrumented protocol使用80(nginx)端口测试目的。没用。
飓风

3

由于sockstat不是本地安装在我的计算机上,所以我破解了stanwise的答案,改为使用netstat。

netstat -nlp | grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\:2000" | awk '{print $7}' | sed -e "s/\/.*//g""

3

我想以编程方式(仅使用Bash)杀死在给定端口上侦听的进程。

假设端口为8089,那么这就是我的操作方法:

badPid=$(netstat --listening --program --numeric --tcp | grep "::8089" | awk '{print $7}' | awk -F/ '{print $1}' | head -1)
kill -9 $badPid

我希望这可以帮助其他人!我知道这会对我的团队有所帮助。


1
这是我用来执行此功能的功能:function kill-listener { lsof -i:$1 -t | xargs kill -9 }以您的端口8089为例:kill-listener 8089
Hurricane Hamilton

3

句法:

杀死-9 $(lsof -t -i:portnumber)

示例: 要终止在端口4200上运行的进程,请运行以下命令

kill -9 $(lsof -t -i:4200)

在Ubuntu中测试。


2

在Windows上,用于获取pid的netstat选项为-o,而-p选择协议过滤器,例如:netstat -a -p tcp -o

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.