У меня есть процесс родительского узла и процесс дочерних узлов. Ребенок привязывает веб-сервер к порту 5000. Родитель иногда убивает и перезапускает ребенка (обычно из-за изменения файла).Узел дочернего процесса не освобождает порт, даже после его смерти родителем
Проблема: когда начинается второй дочерний процесс, я получаю Error: listen EADDRINUSE :::5000
.
Странная вещь, я убить процесс ребенка с child.kill()
, то я жду, чтобы это огня close
события, а затем я жду 5 секунд с setTimeout
, прежде чем пытаться начать новый дочерний процесс ... но он всегда жалуется, что порт занят. Но если я вручную уничтожу родительский процесс (ctrl + C в моем терминале) и запустил его снова, я не получу ошибку. Таким образом, убийство родителя, кажется, единственный способ успешно освободить порт.
Может ли кто-нибудь подумать о причине, почему это произойдет? Почему порт остается занятым после того, как процесс, связанный с ним, был убит до тех пор, пока не закончится его родительский?
Интересно, вы используете что-то вроде [навсегда] (ХТ tps: //github.com/foreverjs/forever) для запуска родителя? – Marcs
, пожалуйста, укажите дополнительную информацию, код. Как начать процесс –