2012-03-26 164 views
0

我有一個自動守護進程並對其進行管理的監視器。殺死一個node.js服務器

所以我有這個node.js程序,以某種方式衍生另一個進程。我的代碼不使用分叉或類似的東西,它只是使用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)。 – 2012-03-26 21:47:33

+0

即使我沒有產卵或分叉什麼,這是否適用? – Ivan 2012-03-26 22:13:14

+0

誤解了這個問題。我不相信它適用。抱歉。 – 2012-03-26 23:19:24

回答

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

注意......你可能需要做一個pskill等等,保存一個進程ID列表。 – Tracker1 2012-03-27 00:29:44

+0

感謝您的回答,但同樣,我沒有產生任何子進程:) – Ivan 2012-03-30 00:10:44