【问题标题】:How to kill childprocess in nodejs?如何杀死nodejs中的子进程?
【发布时间】:2013-11-25 07:49:13
【问题描述】:

使用 shelljs 创建子进程

!/usr/bin/env node

require('/usr/local/lib/node_modules/shelljs/global');
   fs = require("fs");  
   var child=exec("sudo mongod &",{async:true,silent:true});

   function on_exit(){
        console.log('Process Exit');
        child.kill("SIGINT");
        process.exit(0)
    }

    process.on('SIGINT',on_exit);
    process.on('exit',on_exit);

子进程仍在运行..杀死父进程后

【问题讨论】:

  • 您正在运行mongod &,它将进程分叉并将其发送到后台。发送 SIGINT 不会杀死实际的 mongod 进程。
  • 还有一件事,而不是执行sudo mongod,执行mongod 并使用sudo 运行您的脚本。如果需要,您可以在执行mongod(使用process.setuid()process.setgid())后删除权限。
  • 删除了 '&' 并且它起作用了....谢谢stackoverflow.com/users/303270/fardjad
  • @fardjad,那么如何处理呢?我们都知道你说了什么。写在这里,没有秘密nodejs.org/api/…。但是要处理呢?你知道吗?
  • @Green 也许这有帮助:npmjs.com/package/ps-tree

标签: node.js shell child-process


【解决方案1】:

如果您可以使用节点内置的child_process.spawn,您就可以向子进程发送SIGINT 信号:

var proc = require('child_process').spawn('mongod');
proc.kill('SIGINT');

这样做的好处是主进程应该一直挂起,直到所有子进程都终止。

【讨论】:

  • proc.kill() 还不够吗?还是我们需要 proc.kill('SIGINT')?
  • 这如何回答这个问题?这个答案暗示了问题的作者已经为终止进程所做的完全相同的事情。然而它得到了这么多的支持?
  • 错了!您不能终止在子进程中启动的服务。您可以终止子进程,但不能终止服务。这就是问题`传递给子进程的信号实际上可能不会终止该进程。`nodejs.org/api/…
  • 谢谢,这节省了我的时间!另外,我遇​​到了一个问题,即我的分叉进程产生了另一个进程(带集群),.kill('SIGINT') 在我的电子节点应用程序中为我正确关闭了每个子进程和子进程
  • @fishbone,不,不一样。再读一遍。答案建议使用spawn 而不是exec
猜你喜欢
  • 2014-09-30
  • 1970-01-01
  • 2015-10-17
  • 1970-01-01
  • 2019-07-13
  • 2018-05-07
  • 1970-01-01
  • 2010-12-08
  • 1970-01-01
相关资源
最近更新 更多