2017-05-06 116 views
0

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

我如何改變或變通解決此問題?

回答

0

你不想使用execFile,這將等待子進程「迴歸」之前退出(通過調用你沒有傳遞迴調)。

The documentation for execFile還介紹了爲什麼你的子進程被終止:允許在標準輸出或標準錯誤

maxBuffer<number>以字節爲單位的數據量最大。 (默認:200*1024)如果超過,子進程終止。

對於要爲其增量讀取stdout/stderr的長時間運行的進程,請使用child_process.spawn()