2012-03-26 91 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