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

如何终止node.js上的子进程?,node.js,process,Node.js,Process,我有几个节点的子进程,这取决于主进程。每个进程都是一个具有异步逻辑的程序。当一切都完成时,我必须终止这个过程。但这个过程不会自行终止,因为它上面有一些侦听器。例如: if (cluster.isMaster) { for (var i = 0; i < numCPUs; i++) { let worker = cluster.fork(); worker.send(i); } } else { proce

我有几个节点的子进程,这取决于主进程。每个进程都是一个具有异步逻辑的程序。当一切都完成时,我必须终止这个过程。但这个过程不会自行终止,因为它上面有一些侦听器。例如:

    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);
      })
    }
if(cluster.isMaster){
对于(变量i=0;i{
//这里有一些逻辑
//完成后,进程必须终止
控制台日志(msg);
})
}
但这个过程仍然有效,即使我使用“一次”。我曾尝试删除所有进程侦听器,但仍然有效。如何终止它?

像这样使用模块

终止

根据进程ID终止Node.js进程 基于进程ID终止Node.js进程(以及所有子进程)的最低限度但可靠(经过测试)的方法

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);

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

我不确定你在问什么,但不会返回一个好的
终止回调?不,没有帮助