2017-05-06 5 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はとにかく出力をバッファリングしているように見えます。大量の出力を生成するのに十分な入力を与えるだけで、確実にプロセスを終了させることができます。プロセスがステートフルであり、単純に定期的に再起動できないため、問題があります。

この動作を変更または回避するにはどうすればよいですか。

答えて

0

execFileを使用したくない場合は、子プロセスが「戻る」(終了していないコールバックを呼び出す)前に終了するのを待ちます。標準出力または標準エラー出力に許さバイト単位でデータの

maxBuffer<number>最大の量を:あなたの子プロセスが終了されている理由

The documentation for execFileも説明しています。 (デフォルト:200*1024)超過すると、子プロセスは終了します。

stdout/stderrをインクリメンタルに読み込みたい長期実行プロセスの場合は、child_process.spawn()を使用します。

関連する問題