UDP-порт появляется в netstat, а не в lsof?

1

После использования Mosh я заметил, что удерживаемые UDP-порты mosh-serverвсе еще используются после завершения всех процессов.

Запуск netstat -lnпоказывает, что эти порты используются:

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

Поскольку это OS X, этот netstat -pфлаг не поддерживается, поэтому я не могу найти PID процесса, как указывает https://stackoverflow.com/a/3855359 . Вместо этого я бегу sudo lsof -i :61006, который ничего не возвращает.

Хорошо ... возможно я могу перечислить все открытые файлы с числовыми портами и именами хостов и grep через это? sudo lsof -i -n -P | grep 61006... Нет, больше ничего.

Очевидно, что эти порты очищаются при перезагрузке ... Но задача здесь состоит в том, чтобы диагностировать и освободить их без перезагрузки.

Есть идеи? 🤔

mxxk
источник

Ответы:

0

Чуть больше года спустя я снова столкнулся с этой проблемой, но на этот раз диагностировал ее глубже. На этот раз фантомным процессом, связанным с портом, была Java, а не Mosh, и он использовал TCP вместо UDP. В этом случае процесс оказался в состоянии «выхода» и вообще не мог быть убит, за исключением перезагрузки системы.

Во время диагностики я обнаружил несколько интересных моментов:

  1. Можно увидеть PID при netstatиспользовании -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. Процесс 50207, который отображается в netstat, не появляется ни в одном варианте, lsofс или без sudo. Это то же самое поведение, задокументированное в вопросе.

  3. Процесс не может быть убит даже с sudo kill -9! Осматривая его вход ps, он выглядит в интересном состоянии «выход», соответствующем «? 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. Как описано в https://serverfault.com/questions/85799/how-to-kill-an-exiting-process-on-os-x-state-e , кажется, что единственный способ завершить выходной процесс в MacOS это перезагрузить. (Не уверен, что Linux ведет себя иначе.)

Все это было сделано на MacOS High Sierra (10.13.6).

mxxk
источник