
Depois de usar o Mosh, percebi que as portas UDP mantidas por mosh-server
ainda estavam em uso após a saída de todos os processos.
Executando netstat -ln
, mostra que estas portas estão em 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 este é o OS X, o netstat -p
sinalizador não é suportado, então não consigo encontrar o PID do processo, poishttps://stackoverflow.com/a/3855359aponta. Em vez disso, corro sudo lsof -i :61006
, que não retorna nada.
Ok... talvez eu possa listar todos os arquivos abertos com portas numéricas e nomes de host e passar por eles? sudo lsof -i -n -P | grep 61006
...Não, nada de novo.
Obviamente, essas portas são limpas na reinicialização... Mas o desafio aqui é diagnosticar e liberá-las sem reinicializar.
Alguma ideia?
Responder1
Pouco mais de um ano depois, encontrei esse problema novamente, mas desta vez o diagnosticei mais profundamente. Desta vez, o processo vinculado à porta fantasma era Java e não Mosh e estava usando TCP em vez de UDP. Nesse caso, o processo estava em um estado de "saída" e não poderia ser encerrado, exceto pela reinicialização do sistema.
Ao diagnosticar, descobri alguns pontos interessantes ao longo do caminho:
É possível ver o PID
netstat
usando a-v
flag:$ 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
O processo 50207, que aparece em
netstat
, faznãoaparecem em qualquer variante delsof
, com ou semsudo
. Este é o mesmo comportamento documentado na pergunta.O processo não pôde ser eliminado mesmo com
sudo kill -9
! Inspecionando sua entrada emps
, parece estar no estado um interessante estado de "saída" correspondente 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)
Conforme documentado emhttps://serverfault.com/questions/85799/how-to-kill-an-exiting-process-on-os-x-state-e, parece que a única maneira de encerrar um processo existente no MacOS é reinicializar. (Não tenho certeza se o Linux se comporta de maneira diferente.)
Tudo isso foi feito no MacOS High Sierra (10.13.6).