node.jsプロセスの終了時にすべての子プロセス(child_process.spawnを使用して生成)を強制終了する方法は?
27262 次
2 に答える
35
唯一の方法は、ChildProcess
によって返されたオブジェクトへの参照を保持しspawn
、マスター プロセスを終了するときにそれを強制終了することだと思います。
小さな例:
var spawn = require('child_process').spawn;
var children = [];
process.on('exit', function() {
console.log('killing', children.length, 'child processes');
children.forEach(function(child) {
child.kill();
});
});
children.push(spawn('/bin/sleep', [ '10' ]));
children.push(spawn('/bin/sleep', [ '10' ]));
children.push(spawn('/bin/sleep', [ '10' ]));
setTimeout(function() { process.exit(0) }, 3000);
于 2013-04-05T12:52:02.217 に答える
34
@robertklepの回答に追加するには:
私のように、ノードが自分で選択したのではなく、外部で殺されているときにこれを行いたい場合は、シグナルを使用していくつかの策略を講じる必要があります。
重要なのは、殺される可能性のあるシグナルをリッスンし、 を呼び出すprocess.exit()
ことです。そうしないと、ノードはデフォルトexit
でprocess
!
var cleanExit = function() { process.exit() };
process.on('SIGINT', cleanExit); // catch ctrl-c
process.on('SIGTERM', cleanExit); // catch kill
exit
これを行うと、process
通常どおりに聞くことができます。
唯一の問題はSIGKILL
キャッチできないことですが、それは仕様です。とにかく(デフォルト)を使用kill
する必要があります。SIGTERM
詳細については、この質問を参照してください。
于 2015-07-22T11:54:10.843 に答える