node.js 第二个生成的 child 进程没有收到标准输入消息

node.js second spawned child process doesn't receive stdin messages

我的 node.js 脚本中有一个事件需要多次调用,它会生成一个 child 进程。当时不并行只有一个 child 进程。

    var child = spawn('node', [script, arg1],{cwd: "./", stdio:  ["pipe","pipe","pipe","ipc"]})

我需要向 child 进程发送消息。对于第一个生成的进程,它可以很好地工作:

      child.stdin.write("my_message")//also tried child.stdin.write("my_message\n")

衍生脚本上的侦听器如下所示:

process.stdin.on("data", async(data)=> {
    //dosomething
    process.exit();
 }

但是当第一个 child 进程完成并关闭并且第二个 child 进程产生时,child.stdin.write("my_message") 没有到达 child 进程。

我认为 child 进程退出时 stdtin 通道没有关闭是有问题的。 所以我在 child 进程上尝试了 process.stdin.end();,在 child.on("close")child.on("exit") 事件上尝试了以下所有功能

child.on("close", (data)=>{

console.log("Child process closed")
//child.stdin.end();
//child.stdout.end();
//child.stdin.destroy();
//child.kill("SIGINT");
//child = undefined;
//child.disconnect();
//child.ref(); })

我也试过通过 ipc 发送消息。但是当试图向第二个生成的 child.

发送消息时,这会抛出 'ERR_IPC_CHANNEL_CLOSED'

节点--版本 v14.17.5

外包在外部模块中生成子进程和关联侦听器的功能确实有效。不知道为什么。

//spawnChild.js
module.exports = function(arg1){

   var child = spawn('node', [script, arg1],{cwd: "./", stdio:  ["pipe","pipe","pipe","ipc"]})

   //plus the unmodified child.stderr, child.stdout... listeners in here
} 

在主脚本中调用新模块:

var childProcess = require("./spawnChild.js")(arg1)