¿El puerto UDP aparece en netstat pero no en lsof?

¿El puerto UDP aparece en netstat pero no en lsof?

Después de usar Mosh, noté que los puertos UDP retenidos mosh-servertodavía estaban en uso después de que todos los procesos finalizaron.

Ejecutando netstat -ln, muestra que estos puertos están en uso:

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

Como se trata de OS X, la netstat -pbandera no es compatible, por lo que no puedo encontrar el PID del proceso, ya quehttps://stackoverflow.com/a/3855359Señala. En lugar de eso, ejecuto sudo lsof -i :61006, que no devuelve nada.

Bien... ¿quizás pueda enumerar todos los archivos abiertos con puertos numéricos y nombres de host y revisarlos? sudo lsof -i -n -P | grep 61006...No, nada más.

Obviamente, estos puertos se limpian al reiniciar... Pero el desafío aquí es diagnosticarlos y liberarlos sin reiniciar.

¿Algunas ideas?

Respuesta1

Poco más de un año después, volví a encontrarme con este problema, pero esta vez lo diagnosticé más profundamente. Esta vez, el proceso vinculado al puerto fantasma era Java y no Mosh y usaba TCP en lugar de UDP. En este caso, el proceso resultó estar en un estado de "salida" y no se pudo finalizar en absoluto, salvo reiniciar el sistema.

Mientras diagnosticaba, descubrí algunos puntos interesantes en el camino:

  1. Es posible ver el PID netstatusando la -vbandera:

    $ 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. El proceso 50207, que aparece en netstat, nonoaparecer en cualquier variante de lsof, con o sin sudo. Este es el mismo comportamiento documentado en la pregunta.

  3. ¡El proceso no se puede finalizar ni siquiera con sudo kill -9! Al inspeccionar su entrada en ps, parece estar en un estado interesante de "salida" correspondiente a "?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. Como se documenta enhttps://serverfault.com/questions/85799/how-to-kill-an-exiting-process-on-os-x-state-e, parece que la única forma de finalizar un proceso de salida en MacOS es reiniciar. (No estoy seguro si Linux se comporta de manera diferente).

Todo esto se hizo en MacOS High Sierra (10.13.6).

información relacionada