Почему я не могу убить мой дочерний процесс в 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.