如何在node.js上终止子进程?

时间:2016-11-28 11:37:22

标签: node.js process

我有一些节点的子进程,它取决于master。每个过程都是一个带有异步逻辑的程序。我必须在完成所有工作后终止此过程。但是过程并不是由他自己终止,因为有一些听众。例如:

    if (cluster.isMaster) {

      for (var i = 0; i < numCPUs; i++) {
        let worker = cluster.fork();
        worker.send(i);
      }

   } else {
      process.once('message', msg => {
        // here some logic
        // and after this is done, process have to terminated
        console.log(msg);
      })
    }

但过程仍然有效,即使我使用“一次”。我曾尝试删除所有进程侦听器,但它仍然有效。我怎么能终止它?

2 个答案:

答案 0 :(得分:1)

使用类似

的模块
  

终止

根据进程ID终止Node.js进程 基于进程ID终止Node.js进程(and all Child Processes)的极简主义但可靠(经过测试)的方法

var terminate = require('terminate');
terminate(process.pid, function(err, done){
  if(err) { // you will get an error if you did not supply a valid process.pid 
    console.log("Oopsy: " + err); // handle errors in your preferred way. 
  }
  else {
    console.log(done); // do what you do best! 
  }
});

我们可以使用{detached:true}选项启动子进程,这样这些进程就不会附加到主进程,但会进入一组新的进程。然后在主进程上使用process.kill(-pid)方法,我们可以使用相同的pid组杀死同一组子进程中的所有进程。在我的情况下,我在这个组中只有一个进程。

var spawn = require('child_process').spawn;

var child = spawn('my-command', {detached: true});

process.kill(-child.pid);

答案 1 :(得分:0)

对于集群工作进程,您可以调用process.disconnect()以断开IPC通道与主进程的连接。连接IPC通道将使工作进程保持活动状态。