Почему я не могу убить мой дочерний процесс в nodejs на окнах?
exec = require('child_process').exec;
child = exec('node child.js');
child.stdout.pipe(process.stdout);
child.kill('SIGKILL');
function wait() {
setTimeout(wait, 1000);
child.kill('SIGKILL');
}
wait();
Приведенный выше код не работает. Ребенок запускается и будет продолжать писать вывод неограниченно долго. Я не могу понять, как убить этот дочерний процесс. Я запускаю node v0.11.9 в Windows 7. Я знаю, что Windows не использует сигналы POSIX, но отправляет результаты "WM_QUIT" в исключение. Мое лучшее решение для установки протокола событий на stdin?
Ответы
Ответ 1
Это не работает для меня с текущим принятым ответом. Работа над окнами, которые вы можете использовать, - это вызвать программу taskkill для Windows, чтобы убить дочерний процесс для вас. Не совсем так приятно, но это работает. Когда вы порождаете ребенка, вы получаете идентификатор ProcessID (pid), который хранится в дочернем объекте, возвращаемом при нерестах, вы можете использовать с taskkill, чтобы убить процесс.
var spawn = require('child_process').spawn;
spawn("taskkill", ["/pid", child.pid, '/f', '/t']);
Ответ 2
Если вы хотите убить дочерние процессы через SIGKILL
, вместо spawn
, поскольку spawn
создаст дочерний процесс (вместо новой оболочки, например exec
:
var exec = require('child_process').spawn;
В качестве альтернативы вы можете передать параметр timeout
на exec
, который убьет процесс после этого много миллисекунд.
child = exec('node child.js', { timeout: 1000 });
Ответ 3
Мне пришлось использовать следующий пакет, чтобы убить мой дочерний процесс:
https://www.npmjs.com/package/tree-kill
Регулярная команда .kill не будет работать для меня либо на малине pi.
Ответ 4
проверьте этот код, чтобы он работал у меня.
var killer = require('child_process');
killer=exec('taskkill /F /pid '+child.pid);
Здесь killer - это переменная, а child - ваш дочерний процесс.
когда вы создаете дочерний процесс, у него есть много атрибутов, связанных с ним, а pid - один из них.
для получения дополнительной информации о атрибутах и функциях дочерних процессов проверьте этот node.js дочерний процесс.
Эта программа предназначена для того, чтобы убить дочерний процесс в среде Windows.