2012-08-09 3 views
11

부모가 죽을 때 node.js child_process로 생성 된 프로세스가 종료 될 수 있습니까? 말 (I는 해당 스크립트를 중지해야 나중에 그 다음node.js 스크립트가 종료 된 경우 생성 된 프로세스가 달라짐

$ ps faux 
ubuntu 9788 0.0 0.0 73352 1840 ?  S 15:04 0:00 | \_ sshd: [email protected]/7 
ubuntu 9789 0.0 0.2 25400 6804 pts/7 Ss 15:04 0:00 |  \_ -bash 
ubuntu 10149 1.0 0.2 655636 8696 pts/7 Sl+ 15:07 0:00 |   \_ node test.js 
ubuntu 10151 0.0 0.0 7184 608 pts/7 S+ 15:07 0:00 |    \_ tail -f /dev/null 

와 CTRL-C를 할 수 없습니다 나는 프로세스 트리를 보면 다음

내가이 볼 예제 스크립트

var spawn = require('child_process').spawn; 
var log_tail = spawn("tail", ["-f", "/dev/null"]); 

setInterval(function() { 
    console.log('just chilling'); 
}, 10000); 

입니다 내 SSH 연결이 끊어짐)

$ kill 10149 
$ ps faux 
ubuntu 10151 0.0 0.0 7184 608 pts/7 S 15:07 0:00 tail -f /dev/null 

테일 프로세스가 아직 실행 중이며 어떤 PA에서도 분리 된 것을 볼 수 있습니다 임대.

spawner가 죽으면 생성 된 프로세스를 죽일 수있는 프로그래밍 방식이 있습니까?

내가 스폰 할 수있는 옵션이 있습니까, 아니면 다른 방법을 사용해야합니까, 아니면 kill 신호를 잡아야합니까? (kill -9에서 작동할까요?)?

+0

내 문제는 그 반대입니다. 부모가 죽으면 생존 한 프로세스가 살아남지 못합니다. 그것이 내가 원하는 것입니다. – cprcrack

+1

업데이트 : Windows에서만 발생하는 것으로 보입니다. – cprcrack

답변

14

하지 않음 매우 노동 친화적 인, 그러나 이것은 내가 사용하는 템플릿 역할 :

var spawn = require("child_process").spawn; 
var workers = []; 

var killWorkers = function() { 
    workers.forEach(function(worker) { 
    process.kill(worker); 
    }); 
}); 

process.on("uncaughtException", killWorkers); 
process.on("SIGINT", killWorkers); 
process.on("SIGTERM", killWorkers); 

var new_worker = spawn("tail", ["-f", "/dev/null"]); 
workers.push(new_worker); 

내가 주로 마스터 프로세스가 죽을 때 클러스터에서 노동자를 죽이는이를 사용합니다. 에드 : 당연히, 그냥 충돌이나 인터럽트가 아닌 어디서나 killWorkers으로 전화하면됩니다.

+0

kill -9는 여전히 작업자를 떠날 것임을주의하십시오. 내 유스 케이스는 괜찮아요.하지만, –

+0

맞아요. 'kill -9'는 실제로 프로세스의 exit 이벤트를 발생시키지 않습니다. 이 경우 노드 내부에서 어떻게 잡을 지 확신 할 수 없습니다. – cjohn