2015-04-21 3 views
0

У меня есть дочерний процесс, порожденный с помощью child_process.fork, и хотел бы его прекратить. Проблема в том, что дочерний процесс выполняет некоторый длинный расчет привязки процессора, и я не контролирую его. То есть фрагмент кода с привязкой к ЦП не может быть изменен, чтобы использовать process.nextTick или опрос.Killing CPU связанный дочерний процесс

очень упрощенный пример:

parent.js

var cp = require('child_process'); 
var child = cp.fork('child.js'); 

child.js

... 
while(true){} // lengthy computation which I cannot modify 
... 

Можно ли прекратить это? Предпочтительно таким способом, который позволяет поймать событие выхода в дочернем элементе, чтобы сделать некоторые очистки?

Отправка SIGTERM/SIGKILL/etc с использованием child.kill() не , похоже, работает на Windows. Я предполагаю, что даже если он работает на других операционных системах, он все равно не будет убивать процесс из-за того, что ребенок не сможет обрабатывать события при выполнении вычислений.

ответ

0

Я сделал это грязным способом на using the PID процесса и убил его на уровне ОС.

Не знаю, как это сделать в окнах, но и в Linux/Mac Я сделал:

var cp  = require('child_process'), 
    badJob = cp.fork('badFile.js'); 

cp.execSync('kill -9 ' + badJob.pid); 

The signal 9 is caught at the Kernel level, поэтому состояние процесса не имеет никакого значения.

Редактировать: В Windows вы можете использовать taskkill вместо kill. ex:

cp.execSync('taskkill /f ' + badJob.pid); 
Смежные вопросы