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)
我的 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)