2012-08-09 50 views
11

親が強制終了されたときにnode.js child_processで生成されたプロセスが強制終了されることを確認できますか?言う(私はそのスクリプトを停止する必要があり、後に続いて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接続が失われています)

あなたはまだテールプロセスが実行中で、どのPAからも切り離されていることがわかります家賃。

スポンサーが殺された場合、生まれたプロセスを殺すためのプログラム的な方法はありますか?

私に渡すことができるオプションがありますか、別の方法を使用する必要がありますか、killシグナルを捕捉する必要がありますか?

+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); 

マスタープロセスが死んだとき、私は主に、クラスタ内の労働者を殺すためにこれを使用しています。 Ed:明らかに、クラッシュや割り込みだけでなく、どこからでもkillWorkersを呼び出すことができます。

+0

kill -9は依然としてワーカーを離れることに注意してください。おそらく大丈夫ですが、ご使用の場合は –

+0

としてください。 'kill -9'はプロセスの' exit'イベントを実際には起動しません。その場合、ノードの内部でどのようにそれをキャッチするかわからない。 – cjohn

関連する問題