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

После использования 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... Нет, больше ничего.

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

Есть идеи?

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

Другие вопросы по тегам