gpt4 book ai didi

javascript - 如何关闭 node.js 中子进程的 stdio 管道?

转载 作者:行者123 更新时间:2023-11-30 00:14:11 26 4
gpt4 key购买 nike

我需要从 node.js 生成一个子进程并观察它的标准输出一段时间,然后关闭管道(以便 Node 进程可以终止)。

这是我的基本代码(不会终止 Node 进程):

const childProcess = require("child_process");
const child = childProcess.spawn("httpserver");

child.stdout.on("data", (data) => {
console.log("child> " + data);
// Disconnect Now ... How?
});

我已经尝试过以下方法:

  • 使用 detached:true 选项并调用 child.unref()
  • 删除“数据”监听器

经过上述更改但仍然不起作用的代码:

const child = childProcess.spawn("httpserver", [], {detached: true});
child.stdout.on("data", function cb(data) {
console.log("child> " + data);
child.stdout.removeListener("data", cb);
});

child.unref();

有没有其他方法可以关闭 stdout 管道,并断开与子进程的连接?


有点相关:文档提到了一个 child.disconnect() API,但是当我在上面使用它时,我得到一个函数未找到错误。它是否适合在此处使用?为什么它在我的案例中不可用?

最佳答案

这个对我有用。

const fs = require('fs');
const spawn = require('child_process').spawn;
const out = fs.openSync('./out.log', 'a');
const err = fs.openSync('./out.log', 'a');

const child = spawn('prg', [], {
detached: true,
stdio: [ 'ignore', out, err ]
});

child.unref();

https://nodejs.org/api/child_process.html#child_process_options_detached

关于javascript - 如何关闭 node.js 中子进程的 stdio 管道?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35357853/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com