我使用節點的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
信號結束。這是有問題的,因爲這個過程是有狀態的,不能簡單地定期重啓。
我如何改變或變通解決此問題?