Очистка дочернего процесса узла

Процессы узла, запущенные с require('child_process').spawn, могут close и exit. Я предполагаю, что в некоторых случаях они также могут просто зависнуть навсегда, не вежливо сказав об этом Node. Как мне убедиться, что мое приложение Node всегда хорошо очищает свои дочерние процессы? Я знаю, что kill можно использовать для «отправки сигнала дочернему процессу». Это не похоже на большую гарантию, тем более что в документации говорится: «Обратите внимание, что, хотя функция называется kill, сигнал, доставленный дочернему процессу, может на самом деле не убить его. kill действительно просто посылает сигнал процессу».


person AlexMA    schedule 06.09.2013    source источник


Ответы (1)


Именно так kill работает в Linux. Аналог узла обеспечивает ту же функциональность.

kill по умолчанию отправляет сигнал SIGTERM. Принудительное уничтожение через kill -9 отправляет SIGKILL. SIGKILL нельзя перехватить, заблокировать или проигнорировать. Но используйте это в крайнем случае. Это предотвращает процесс очистки файлов блокировки.

См. документацию по Linux для kill и файла используемые сигналы.

person user568109    schedule 06.09.2013
comment
Интересно. Как бы вы предложили мне очистить процессы тогда? Я предполагаю, что попробуйте убить sigterm по умолчанию, а затем вернуться позже и отправить sigkill, если процесс все еще жив? Как долго я должен ждать, прежде чем отправить sigkill? - person AlexMA; 06.09.2013
comment
SIGTERM может быть проигнорирован процессом и может продолжать работать бесконечно. Вот когда вам нужен SIGKILL. Это зависит от ваших потребностей. Если вы часто запускаете легкие процессы, оставьте небольшой тайм-аут 1-2 секунды. Но если вы запустили тяжеловесный процесс/демон, вы должны сделать его более безопасным, как сервер базы данных. Но по моему опыту вам не нужен SIGKILL. Что еще более важно, если вам это нужно, это указывает на проблему с самой программой. - person user568109; 07.09.2013
comment
Спасибо чувак. Это полезная информация. Я предполагаю, что версия Node для Windows имеет проблемы с этим уровнем тонкости, но я, вероятно, все равно буду размещать на Linux-сервере. - person AlexMA; 09.09.2013