2016-10-26 1 views
1

У меня есть процесс родительского узла и процесс дочерних узлов. Ребенок привязывает веб-сервер к порту 5000. Родитель иногда убивает и перезапускает ребенка (обычно из-за изменения файла).Узел дочернего процесса не освобождает порт, даже после его смерти родителем

Проблема: когда начинается второй дочерний процесс, я получаю Error: listen EADDRINUSE :::5000.

Странная вещь, я убить процесс ребенка с child.kill(), то я жду, чтобы это огня close события, а затем я жду 5 секунд с setTimeout, прежде чем пытаться начать новый дочерний процесс ... но он всегда жалуется, что порт занят. Но если я вручную уничтожу родительский процесс (ctrl + C в моем терминале) и запустил его снова, я не получу ошибку. Таким образом, убийство родителя, кажется, единственный способ успешно освободить порт.

Может ли кто-нибудь подумать о причине, почему это произойдет? Почему порт остается занятым после того, как процесс, связанный с ним, был убит до тех пор, пока не закончится его родительский?

+0

Интересно, вы используете что-то вроде [навсегда] (ХТ tps: //github.com/foreverjs/forever) для запуска родителя? – Marcs

+0

, пожалуйста, укажите дополнительную информацию, код. Как начать процесс –

ответ

0

На самом деле это блокирует процесс, так что вам нужно, чтобы убить процесс, используя следующую команду просто введите

пс -ax

Вы получите список процессов, от которых необходимо проверить идентификатор процесса, который будет заблокирован затем убить процесс с помощью этой команды

убить -9 ProcessId

Смежные вопросы