【问题标题】:Killing a node.js server杀死 node.js 服务器
【发布时间】:2012-03-26 21:39:39
【问题描述】:

我有一个自动守护进程并管理它们的监视器。

所以我有这个 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

然后我的进程监视器设置了一个 pid 文件为 25053,所以当我告诉它重新启动程序时它会杀死 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

那么我该如何让它“子”进程或者它是什么也被杀死呢?

我觉得这是节点中的基本内容,但我还没有找到答案。

【问题讨论】:

  • 我还不确定这是否可行。见this pull request
  • 即使我没有生成或分叉任何东西也适用吗?
  • 误解了这个问题。我不相信它确实适用。对不起。
  • 我可能弄错了,但“其他”进程不只是显示主节点脚本输出的外壳,等待它完成吗?

标签: node.js process


【解决方案1】:

你需要监听进程的退出事件...

尝试:

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

【讨论】:

  • 注意...您可能需要执行 pskill 等操作,保留要杀死的进程 ID 列表。
  • 感谢您的回答,但同样,我不会产生任何子进程 :)
猜你喜欢
  • 2019-04-20
  • 1970-01-01
  • 2014-07-11
  • 1970-01-01
  • 1970-01-01
  • 2016-04-20
  • 2021-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多