2012-03-26 16 views
0

私はプロセスを自動デーモン化して管理するモニターを持っています。node.jsサーバーを強制終了する

私はこのnode.jsプログラムを持っていて、何とか別のプロセスを生成しています。私のコードではフォークを使用していません。そのようなものは、dbの作業を行うsetIntervalを使用した無限ループです。

これは、それが実行されます方法です:

この後
node /path/to/program.js >> program.log 2>&1 

top -bcn1|grep program.jsショー:

24763 ubuntu 20 0 695m 21m 5464 S 0 0.3 0:00.39 node /path/to/program.js                         
25053 ubuntu 20 0 4264 580 484 S 0 0.0 0:00.01 sh -c node /path/to/program.js >> program.log 2>&1 

私はプログラムを再起動することを教えたときに私のプロセスモニタはその後、25053でpidファイルを設定しますので、それは25053を殺し、プログラムを再び開始し、今度は前のコマンドの出力は次のようになります:

24763 ubuntu 20 0 695m 21m 5464 S 0 0.3 0:00.39 node /path/to/program.js                         
23520 ubuntu 20 0 630m 21m 5464 S 0 0.3 0:00.39 node /path/to/program.js                         
23012 ubuntu 20 0 4264 580 484 S 0 0.0 0:00.01 sh -c node /path/to/program.js >> program.log 2>&1 

それでは、どのようにして "子供"のプロセスなのか、それが何であれ殺されるのですか?

これはノードの基本的なものだと感じましたが、まだ回答が見つかりませんでした。

+0

これはまだ可能ですか? [このプルリクエスト](https://github.com/joyent/node/pull/2832)を参照してください。 –

+0

私は何も産んでいない、または何もフォークしていない場合でも適用されますか? – Ivan

+0

質問が間違っていました。私はそれが当てはまるとは思わない。ごめんなさい。 –

答えて

0

あなたは、プロセスのオフ終了イベントをリッスンする必要があります...

試してみてください。

var children = []; 
//keep track of the child processes... 
process.on('exit',function(){ 
    children.forEach(function(child){ 
     child.kill('SIGINT'); 
    }); 
});

は注:子供たちに、あなたはなど「SIGINT」のため聞きしたいと思う

参照:http://nodejs.org/api/child_process.html

+0

note ...あなたはkillするプロセスIDのリストを保持して、pskillなどをする必要があるかもしれません。 – Tracker1

+0

あなたの答えをありがとうが、もう一度、私は子プロセスを産んでいないよ:) – Ivan

関連する問題