2013-11-25 3 views
34

Создано childprocess помощью shelljsКак убить childprocess в nodejs?

!/usr/bin/env node 

require('/usr/local/lib/node_modules/shelljs/global'); 
    fs = require("fs"); 
    var child=exec("sudo mongod &",{async:true,silent:true}); 

    function on_exit(){ 
     console.log('Process Exit'); 
     child.kill("SIGINT"); 
     process.exit(0) 
    } 

    process.on('SIGINT',on_exit); 
    process.on('exit',on_exit); 

процесс Ребенок все еще работает .. после того, как убить родительского процесса

+4

Вы используете 'mongod &', который разворачивает процесс и отправляет его на задний план. отправка ** SIGINT ** не будет уничтожать процесс 'mongod'. – fardjad

+0

Еще одна вещь, вместо выполнения 'sudo mongod', exec' mongod' и запуска вашего скрипта с 'sudo'. Вы можете отказаться от привилегий после выполнения 'mongod' (с' process.setuid() 'и' process.setgid() '), если хотите. – fardjad

+0

удалено '&', и это сработало ... спасибо http://stackoverflow.com/users/303270/fardjad –

ответ

52

Если вы можете использовать узел, построенный в child_process.spawn, вы в состоянии послать SIGINT сигнал к детский процесс:

var proc = require('child_process').spawn('mongod'); 
proc.kill('SIGINT'); 

Недостатком этого является то, что основной процесс должен зависеть до тех пор, пока все дочерние процессы не прекратятся.

+0

не является proc.kill() достаточно? или нам нужен proc.kill ('SIGINT')? –

+0

Я не помню специфику 'mongod', но отправка' proc.kill() '(в настоящее время) эквивалентна отправке' proc.kill ('SIGTERM') '(я предполагаю, что я считаю, что' SIGINT' будет закрыл 'mongod'?). Я предполагаю, что выберете правильный сигнал для своего конкретного приложения. –

+6

Как это ответить на вопрос? Этот ответ предлагает точно то же самое, что автор вопроса уже делает, чтобы убить процесс. Тем не менее, он получает много оборотов? – fishbone

Смежные вопросы