subprocess没有收到消息

我不知道这里发生了什么,但是当我使用fork来启动下面的过程时,我的主进程输出Child process " + cid + " running ,但是当我尝试向孩子发送消息时, "Child process " + data不输出。 我不知道为什么。

这是subprocess:

 var running = true; var cid = process.env.cid; process.on("message", function(data){ data = (data + "").trim().toLowerCase(); process.send("Child process " + data); }); process.send({cid: cid, msg: "Child process " + cid + " running"}); while(running){ } process.send("Child stopped!"); 

我是这样开始小孩的:

 var children = []; for(var i = 0; i < 5; i++){ children[i] = cp.fork("./child.js", [], { // silent: true, cwd: __dirname, env: { cid: i } }); children[i].on("message", function(msg){ console.log("Message from " + msg.cid + ": " + msg.msg); }); } 

然后我发送这样的消息:

 for(var i in children){ console.log(" Sending message to child " + i); children[i].send("msg"); } 

当我运行server.js我得到这个输出:

 Message from 1: Child process 1 running Message from 0: Child process 0 running Message from 2: Child process 2 running Message from 3: Child process 3 running Message from 4: Child process 4 running Sending message to child 0 Sending message to child 1 Sending message to child 2 Sending message to child 3 Sending message to child 4 

但他们似乎没有回应什么。

我得到没有错误,并没有从subprocess的输出。 是什么导致了这种情况发生?

你可以删除无限的while循环,孩子们不应该退出,而有活动的事件监听器(我希望),除非你明确地调用process.exit()

而不是告诉subprocess结束在过程样式的最后一行,退出时使用事件样式:

 process.on('exit', function(code) { process.send("Child stopped!"); }); 

stream程文档

ChildProcess文档

如果subprocess仍然退出,即使是接收消息的事件监听器,也要使用setTimeout()setInterval()循环,这样它们不会像while (true)那样阻塞。

 while(running){ } 

这个块就是这个原因,它会永远运行下去,并且一旦孩子生成就会运行,所以subprocess将永远在那个循环中被触发,没有时间来处理下一行process.send("Child stopped!"); 或者process.on("message",...