データロギングアプリケーションを作成していますが、すべてが次のように始まります。
./program > out.bin
データコレクタは定期的にstdout出力ファイルを集計し、データを読み込みます。
問題は、IOストリームがバッファリングされ、一部のプログラムが毎秒1バイトでデータを出力する場合、実際にデータをフラッシュするのに長い時間(デフォルトの4kBバッファサイズ、最大4k秒)がかかることです。
私の質問は、stdout / pipe / printfバッファを外部から強制的にフラッシュする方法です。つまり、fflush(stdout)
。
私は次のような様々なウェブサイトを読みました。パイプラインでバッファリングをオフにするただし、IOパフォーマンス(測定)に大きな影響を与えるため、バッファを無効にすることはできません。
私は高性能生産ソリューションを探しており、常に次の基準を満たしています。
- プログラム(データプロデューサー)PIDは常に知られています。
- 出力は常に既知のパスを持つファイルです。
- データロギングプロセスには完全なルートアクセス権があります。
ベストアンサー1
gdb -p PID -batch -ex 'p fflush(stdout)'
すべてのデバッグとハッキングと同様に、YMMV。