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

相關內容