UDP-Port wird in netstat angezeigt, aber nicht in lsof?

UDP-Port wird in netstat angezeigt, aber nicht in lsof?

Nachdem ich Mosh verwendet hatte, bemerkte ich, dass die von gehaltenen UDP-Ports mosh-servernach dem Beenden aller Prozesse immer noch verwendet wurden.

Beim Ausführen netstat -lnwird angezeigt, dass die folgenden Ports verwendet werden:

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      *.*                               

Da es sich um OS X handelt, netstat -pwird das Flag nicht unterstützt, daher kann ich die PID des Prozesses nicht finden, dahttps://stackoverflow.com/a/3855359weist darauf hin. Stattdessen führe ich aus sudo lsof -i :61006, was nichts zurückgibt.

Okay … vielleicht kann ich alle offenen Dateien mit numerischen Ports und Hostnamen auflisten und sie mit Greep durchsuchen? sudo lsof -i -n -P | grep 61006… Nein, schon wieder nichts.

Natürlich werden diese Ports beim Neustart bereinigt ... Die Herausforderung besteht hier jedoch darin, sie zu diagnostizieren und freizugeben, ohne einen Neustart durchzuführen.

Irgendwelche Ideen?

Antwort1

Etwas mehr als ein Jahr später stieß ich erneut auf dieses Problem, diesmal jedoch mit einer tieferen Diagnose. Diesmal war der Phantom-Port-gebundene Prozess Java und nicht Mosh und verwendete TCP statt UDP. In diesem Fall befand sich der Prozess in einem „Beenden“-Zustand und konnte überhaupt nicht beendet werden, außer durch einen Systemneustart.

Bei der Diagnose habe ich einige interessante Punkte entdeckt:

  1. netstatEs ist möglich, die PID mithilfe des Flags anzuzeigen -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. Der Prozess 50207, der in angezeigt wird netstat,nichterscheinen in allen Varianten von lsof, mit oder ohne sudo. Dies ist das gleiche Verhalten, das in der Frage dokumentiert ist.

  3. Der Prozess konnte nicht einmal mit beendet werden sudo kill -9! Bei der Überprüfung seines Eintrags in psscheint er sich in einem interessanten „Beenden“-Zustand zu befinden, der „?E“ entspricht:

    $ 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. Wie dokumentiert inhttps://serverfault.com/questions/85799/how-to-kill-an-exiting-process-on-os-x-state-e, es scheint, dass die einzige Möglichkeit, einen laufenden Prozess unter MacOS zu beenden, ein Neustart ist. (Ich bin nicht sicher, ob sich Linux anders verhält.)

All dies wurde auf MacOS High Sierra (10.13.6) durchgeführt.

verwandte Informationen