A porta UDP aparece no netstat, mas não no lsof?

A porta UDP aparece no netstat, mas não no lsof?

Depois de usar o Mosh, percebi que as portas UDP mantidas por mosh-serverainda 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 -psinalizador 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:

  1. É possível ver o PID netstatusando a -vflag:

    $ 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. O processo 50207, que aparece em netstat, faznãoaparecem em qualquer variante de lsof, com ou sem sudo. Este é o mesmo comportamento documentado na pergunta.

  3. O processo não pôde ser eliminado mesmo com sudo kill -9! Inspecionando sua entrada em ps, 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)
    
  4. 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).

informação relacionada