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. В этом случае процесс оказался в состоянии "выхода" и вообще не мог быть убит, за исключением перезагрузки системы.
Во время диагностики я обнаружил несколько интересных моментов:
Можно увидеть 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
Процесс 50207, который появляется в
netstat
, не появляется ни в одном вариантеlsof
, с или безsudo
, Это то же самое поведение, задокументированное в вопросе.Процесс не может быть убит даже
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)
Как описано в https://serverfault.com/questions/85799/how-to-kill-an-exiting-process-on-os-x-state-e, кажется, что единственный способ завершить выходной процесс в MacOS это перезагрузить. (Не уверен, что Linux ведет себя иначе.)
Все это было сделано на MacOS High Sierra (10.13.6).