Я нахожусь в OS X 10.11.6 и пытаюсь запустить программу, которая обычно запускается на UDP-порту 8008
при запуске.
Эта программа обычно также генерирует несколько вспомогательных дочерних процессов во время ее работы, но порт связан с родительским процессом.
К сожалению, при выходе из программы иногда порт остается открытым, хотя программа (родитель + дочерние элементы) больше не существует.
Если это произойдет, если я попытаюсь запустить программу снова, она, естественно, терпит неудачу с ошибкой EADDRINUSE
, и в этих случаях, независимо от того, что я пытаюсь, единственным решением, которое я нашел, было перезагрузка машины.
Мне тяжело полагать, что я не могу освободить порт без перезагрузки.
Вот некоторые диагностические операции, которые я запустил до сих пор (я использовал все эти и без sudo
):
Найдите процесс, используя порт 8008
с lsof
:
$ lsof -i -n -P | grep UDP | grep 8008
Но удивительно не возвращает никаких результатов.
Однако мне больше повезло с netstat
:
$ netstat -tulnvp udp | grep 8008
udp4 0 0 *.8008 *.* 196724 9216 47205 0
Итак, порт действительно связан, и виновником является pid 47205
, однако:
$ ps aux | grep 47205
Не возвращает ничего. То же самое для PID 47206
и 47207
(точнее, PID, назначаемых детям). Я также пробовал другие варианты grep
(имя программы, путь и т.д.).
Я также искал любой отчет о процессах 47205
в качестве его родителя:
$ ps -axo pid,ppid,command | grep 47205
Таким образом, процессы детей также явно мертвы.
Невозможно kill
ничего, я попытался выполнить SIGHUP launchd
в надежде, что он может удалить любые дочерние процессы zombie:
$ sudo kill HUP 1
$ sudo kill -s HUP 1
Но, увы, netstat
все еще показывает границу порта.
Наконец, я попытался перезапустить интерфейс loopback:
$ sudo ifconfig lo down
$ sudo ifconfig lo up
Но опять же, без эффекта.
Я ждал несколько часов с момента последнего запуска программы, поэтому я уверен, что любой тайм-аут случится к настоящему времени, но порт просто не освободится.
Любые идеи о том, как принудительно освободить порт без перезагрузки?
Edit: