我有一些节点的子进程,它取决于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);
})
}
但过程仍然有效,即使我使用“一次”。我曾尝试删除所有进程侦听器,但它仍然有效。我怎么能终止它?
答案 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通道将使工作进程保持活动状态。