
Después de usar Mosh, noté que los puertos UDP retenidos mosh-server
todaví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 -p
bandera 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:
Es posible ver el PID
netstat
usando la-v
bandera:$ 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
El proceso 50207, que aparece en
netstat
, nonoaparecer en cualquier variante delsof
, con o sinsudo
. Este es el mismo comportamiento documentado en la pregunta.¡El proceso no se puede finalizar ni siquiera con
sudo kill -9
! Al inspeccionar su entrada enps
, 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)
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).