UDP 端口出现在 netstat 中但没有出现在 lsof 中?

UDP 端口出现在 netstat 中但没有出现在 lsof 中?

使用 Mosh 后,我注意到所有进程退出后,所持有的 UDP 端口mosh-server仍在使用中。

运行netstat -ln,显示这些端口正在使用中:

Active Internet connections
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)    

udp4       0      0  10.0.106.61.60002      *.*                               
udp4       0      0  10.0.106.61.61006      *.*                               

由于这是 OS X,netstat -p不支持该标志,因此我找不到该进程的 PID,因为https://stackoverflow.com/a/3855359指出。相反,我运行sudo lsof -i :61006,但什么也没有返回。

好的……也许我可以列出所有打开的文件,并附带数字端口和主机名,然后通过 grep 进行查找?sudo lsof -i -n -P | grep 61006……不,还是没有结果。

显然,这些端口在重启时会被清理......但这里的挑战是在无需重启的情况下诊断并释放它们。

有任何想法吗?

答案1

一年多后,我再次遇到了这个问题,但这次诊断得更深入。这一次,幻影端口绑定进程是 Java 而不是 Mosh,它使用的是 TCP 而不是 UDP。在这种情况下,该进程处于“退出”状态,根本无法终止,除非系统重新启动。

在诊断过程中,我发现了一些有趣的点:

  1. netstat使用该标志可以查看 PID -v

    $ netstat -avn
    Active Internet connections (including servers)
    Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)     rhiwat shiwat    pid   epid
    ...
    tcp4       0      0  *.6000                 *.*                    LISTEN      131072 131072  50207      0
    
  2. 进程 50207 出现netstat不是出现在 的任何变体中lsof,无论是否sudo。这与问题中记录的行为相同。

  3. 即使使用 也无法终止该进程sudo kill -9!检查 中的条目ps,它看起来处于一个有趣的“退出”状态,对应于“?E”:

    $ ps aux
    USER               PID  %CPU %MEM      VSZ    RSS   TT  STAT STARTED      TIME COMMAND
    ...
    mxxk             50207   0.0  0.0        0      0   ??  ?E    5Aug19   0:00.00 (java)
    
  4. 正如记录的那样https://serverfault.com/questions/85799/how-to-kill-an-exiting-process-on-os-x-state-e,看来在 MacOS 中终止退出进程的唯一方法是重新启动。(不确定 Linux 的行为是否不同。)

所有这些都是在 MacOS High Sierra (10.13.6) 上完成的。

相关内容