UDP端口出现在netstat中,但不在lsof中?


1

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

运行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...不,再也没有。

显然,这些端口在重新启动后确实会被清理...但是这里的挑战是诊断并释放它们,而无需重新启动。

有任何想法吗?🤔

Answers:


0

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

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

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

    $ 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中均不会出现。这与问题中记录的行为相同。lsofsudo

  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)上完成的。

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.