如何使用pid杀死Node.js子进程?

Ful*_*ack 7 javascript node.js

我正在寻找一种方法来使用他们的pid杀死Node.js进程.我一直在搜索Google,StackOverflow和Node.js文档几个小时.它似乎应该存在.我只能根据newProc下面的变量找到如何做到这一点,但我不能这样做,newProc.kill()因为我想从函数范围之外杀死子进程.另外,我需要在MongoDB中存储一些东西以保存记录,所以我认为pid会更合适.

var pid = newJob();
kill(pid); //<--anything like this?

var newJob = function () {
  var exec = require('child_process').exec,
  var newProc = exec("some long running job", function (error, stdout, stderr) {
    console.log("stdout: " + stdout);
    console.log("stderr: " + stderr);
    if (error) console.log('exec error: ' + error);
  });
  return newProc.pid;
}
Run Code Online (Sandbox Code Playgroud)

编辑:我可以process.kill(pid)用于子进程吗?该文件指出,这是可以从任何地方访问一个全局对象.

最后,作为一个轻微的切线,有没有办法确保pid永远是唯一的?当然,我不想无意中杀死一个进程.

Den*_*ton 13

process.kill()完成这项工作.如编辑中所述,process是每个Node模块中都有的全局对象.

请注意,只要PID正在运行,PID就只能唯一地标识您的子进程.退出后,PID可能已被重用于不同的进程.如果你想确定你没有意外杀死另一个进程,你需要一些方法来检查进程是否实际上是你生成的进程.(newProc.kill()本质上是一个包装器process.kill(pid),因此有同样的问题.)

  • @LeonardoRick 再次检查 `process.kill()` 的文档。它的签名是“process.kill(pid, [status])”,所以如果您想要通过 PID 杀死进程,那么这就是您的函数。 (3认同)