Как я могу убить дочерний процесс без запуска события выхода дочернего процесса? - PullRequest
1 голос
/ 08 марта 2019

Я порождаю дочерний процесс:

child = spawn("childprocess", [], {
    detached: true
}

И наблюдаю событие 'exit' с:

child.on('exit', (code, signal) => {
    // Do stuff
}

Когда мое приложение закрывается, я убиваюдочерний элемент с помощью taskkill (потому что он работает в Windows):

exec(`taskkill /PID ${child.pid} /F /T`, (error, stdout, stderr) => {
    // Do stuff
}

Проблема в том, что, когда процесс убит, событие выхода срабатывает (понятно), но я не хочу этогок.Есть ли какой-нибудь способ удалить прослушиватель событий?Или убить процесс, не вызывая события?Я пробовал child.removeListener('exit'), но это не сработало (может, потому что это анонимная функция?).

1 Ответ

0 голосов
/ 08 марта 2019

Я пробовал child.removeListener('exit'), но это не сработало (может, потому что это анонимная функция?).

Неважно, имеет имя функция или нет. Вам просто нужно передать один и тот же объект функции в removeListener (или off):

var handler = (code, signal) => {};
child.on('exit', handler);
child.off('exit', handler);

Или позвоните child.removeAllListeners('exit');.

...