如何关闭 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?
});
我已经尝试过以下方法:
- 使用
detached:true
选项并调用 child.unref()
- 删除 "data" 侦听器
经过上述更改但仍然不起作用的代码:
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
我需要从 node.js 生成一个子进程并观察它的标准输出一段时间,然后关闭管道(以便节点进程可以终止)。
这是我的基本代码(不会终止节点进程):
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()
- 删除 "data" 侦听器
经过上述更改但仍然不起作用的代码:
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