确定侦听某个端口的进程pid

Cyc*_*one 94 unix port freebsd pid

正如标题所说,我正在运行多个游戏服务器,并且每个游戏服务器都具有相同name但不同PIDport数量.我想匹配PID正在侦听某个端口的服务器,然后我想杀死这个进程.我需要它来完成我的bash脚本.

这甚至可能吗?因为它没有在网上找到任何解决方案.

Lau*_*nas 138

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

lsof -i:80 -t
Run Code Online (Sandbox Code Playgroud)

  • 这还包括在该端口上_connected_的进​​程.`lsof -i4TCP:80 -sTCP:LISTEN -t`可能就是你想要的. (12认同)
  • `kill -9 \`lsof -i:80 -t\`` 以便于复制 (2认同)

sta*_*ise 118

-pnetstat为您提供了PID的进程:

netstat -l -p
Run Code Online (Sandbox Code Playgroud)

编辑:在FreeBSD中获取套接字用户的PID所需的命令是sockstat.正如我们在与@Cyclone的讨论中所做的那样,完成这项工作的路线是:

sockstat -4 -l | grep :80 | awk '{print $3}' | head -1
Run Code Online (Sandbox Code Playgroud)

  • `netstat:选项需要一个参数 - p` (10认同)
  • 试试`netstat -nlp | grep:80`而不是 (5认同)
  • `netstat:80:unknown或unustrumented protocol`使用`80`(nginx)端口来测试purpoes.没工作. (2认同)
  • @jasonbrittain在Cygwin上,调用windows native`netstat`.它有其他语法. (2认同)
  • 这个答案是错误的:netstat:option需要一个参数 - p (2认同)

gav*_*koa 15

netstat -p -l | grep $PORTlsof -i :$PORT 解决方案是好的但我更喜欢fuser $PORT/tcp扩展语法到POSIX(适用于coreutils)和管道一样:

pid=`fuser $PORT/tcp`
Run Code Online (Sandbox Code Playgroud)

它打印纯净的pid,所以你可以放弃sed魔法.

使fuser我的爱人工具的一件事就是能够直接向该过程发送信号(这种语法也是POSIX的扩展):

$ fuser -k $port/tcp       # with SIGKILL
$ fuser -k -15 $port/tcp   # with SIGTERM
$ fuser -k -TERM $port/tcp # with SIGTERM
Run Code Online (Sandbox Code Playgroud)

此外-k还得到FreeBSD的支持:http://www.freebsd.org/cgi/man.cgi?query = fuser


小智 9

netstat -nlp 应该告诉你什么在哪个端口上监听PID.

  • `netstat: 80: unknown or uninstrumented protocol` 使用 `80` (nginx) 端口来测试目的。没有工作。 (2认同)