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

How to close the stdio pipes of child-processes in node.js?

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

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

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

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

我已经尝试过以下方法:

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

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 但是当我在上面使用它时,我得到一个函数未找到错误。在这里使用 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