我使用节点的child_process.execFile()
启动,并与将所有输出到其标准输出和错误流的进程进行通信。该过程运行的时间不确定量和理论上可以产生任何输出量,即:那我不使用的最后一个参数execFile()
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);
});
注意,因为我从来没有需要的所有数据的聚合视图是从任何一个流都出来了。尽管有这种遗漏,Node似乎仍在缓冲输出,并且我可以通过给它足够的输入来产生大量的输出,从而可靠地使该过程以SIGTERM
信号结束。这是有问题的,因为这个过程是有状态的,不能简单地定期重启。
我如何改变或变通解决此问题?