如何在 node.js 中关闭子进程的 stdio 管道
How to close the stdio pipes of child-processes in node.js?
我需要从node生成一个子进程.js并观察其stdout一段时间,然后关闭管道(以便节点进程可以终止)。
这是我的基本代码(不会终止节点进程):
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,但是当我在上面使用它时,我收到一个函数未找到错误。它是在这里使用的正确 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
相关文章:
- 子进程未接收消息
- 如何通过子进程连接Java应用程序后在node.js中编写文件
- 节点.js子进程中的运行函数
- 如何将画布对象从子进程流式传输回 Node.js
- 如何在Firefox插件中向子进程发送消息,如Chrome原生消息
- 从生成的子进程中获取信息的最佳方法
- 在 Node.js 中使用 Jasmine 测试子进程发送
- 在快速服务器中生成子进程
- 如何在 node.js 中关闭子进程的 stdio 管道
- 如何使用并行子进程在大型数组上执行“工作”
- 使用 node.js (子进程) 运行 shell 脚本
- 如何从nodejs中的守护进程生成gpg子进程
- Cloud9 在生成子进程时抛出错误,是否有解决方法
- 如何在从 Meteor.method 返回之前等待子进程结果
- 将输入数据发送到节点.js中的子进程
- 完成时的子进程事件
- 如何在 Debian 上通过 node.js 中的引用变量停止子进程
- Node.js为什么不立即启动子进程
- 通过Node.js子进程关闭CS:GO专用服务器
- 如何重新启动Node.js子进程