【发布时间】:2017-05-06 15:51:00
【问题描述】:
我正在使用 Node 的 child_process.execFile() 启动并与将其所有输出放入其标准输出和错误流的进程进行通信。该过程运行的时间不确定,理论上可以产生任意数量的输出,即:
const process = execFile('path/to/executable', [], {encoding: buffer'});
process.stdout.on('data', (chunk) => {
doSomethingWith(chunk);
});
process.stderr.on('data', (chunk) => {
renderLogMessage(chunk);
});
请注意,我没有使用 execFile() 的最后一个参数,因为我从不需要来自任何一个流的所有数据的聚合视图。尽管有这个遗漏,但 Node 似乎无论如何都在缓冲输出,我可以可靠地以 SIGTERM 信号结束进程,只需为其提供足够的输入以生成大量输出。这是有问题的,因为进程是有状态的,不能简单地定期重新启动。
如何更改或解决此问题?
【问题讨论】:
标签: node.js stdout child-process stderr