2013-02-21 2 views
7

다음 코드에서 child_process.spawn에 자식 프로세스() 청소 방법 : 종료 자식 프로세스를 기다리지 않고Node.js를

#!/usr/bin/env node 
"use strict"; 

var child_process = require('child_process'); 

var x = child_process.spawn('sleep', [100],); 

throw new Error("failure"); 

가 자식 프로세스를 생성하고 종료합니다.

어떻게받을 수 있습니까? 나는 waitpid (2)를 호출하고 싶지만 child_process는 waitpid (2)가없는 것 같다.

ADDED :

미안 해요, 난 정말 원하는 것을 부모가있는 경우 자식 프로세스를 종료하는 대신 그것을 기다리는 것입니다.

+0

당신이 잘못을 던져 경우 오류가 catch되지 않으면 응용 프로그램이 종료됩니다. 하위 프로세스를 기다렸다가 응용 프로그램을 종료 하시겠습니까? – pfried

+1

사실, 부모 프로세스가 종료 될 때 자식 프로세스를 죽이고 싶습니다. –

답변

13
#!/usr/bin/env node 
"use strict"; 

var child_process = require('child_process'); 

var x = child_process.spawn('sleep', [10]); 

x.on('exit', function() { 
    throw (new Error("failure")); 
}); 

편집 :

이 당신은 process.on('exit', function() { x.kill() })

같은 주요 process에 리스너를 추가하지만이 문제가 같은 오류를 발생시켜 주 프로세스를 수신 할 수

, 당신은 더 나은하여 프로세스를 종료 process.exit()

#!/usr/bin/env node 
"use strict"; 

var child_process = require('child_process'); 

var x = child_process.spawn('sleep', [100]); 

process.on('exit', function() { 
    x.kill(); 
}); 

process.exit(1); 
+0

process.on ('exit') process.on ('uncaughtException')은 내가 원하는 것을 할 수있다. 감사! –

+3

문제가 해결되면 답변을 허용으로 표시하십시오. – pfried

+0

죽인 후에 실제로 자식 프로세스를 기다려야합니다. 그렇지 않으면 자식 프로세스가 좀비 프로세스로 바뀝니다. 부모 프로세스가 종료되면 pid 1 (init)이 정리 프로세스를 종료합니다. 그게 효과가 있지만 기술적으로, 부모가 끝내기 전에 자신의 혼란을 청소하면 더 좋습니다. –

3
#!/usr/bin/env node 
"use strict"; 

var child_process = require('child_process'); 

var x = child_process.spawn('sleep', [10]); 

process.on('exit', function() { 
    if (x) { 
    x.kill(); 
    } 
}); 
+1

'x.kill()'이 호출되기 전에 자식 프로세스가 종료되고 재 할당 된 PID를 가진 프로세스를 실수로 죽이는 것을 방지하려면'if (x)'가 좋은 체크입니까? – Sukima