プログラムがバックグラウンドで実行されているときに、プログラムのstdoutをファイルにリダイレクトするにはどうすればよいですか?
私は毎秒出力を生成するプログラムを持っています。通常どおり実行してファイルにリダイレクトすると、期待どおりにそのファイルに出力が表示されます。
#./program > file.txt
#cat file.txt
output
output
output
#
バックグラウンドで同じことを行おうとすると、ファイルは空のままになります。
#./program > file.txt &
#cat file.txt
#
sh -c './program > file.txt; cat file.txt' &
はどうですか?
Stdoutをテキストファイルにリダイレクトする場合、ストリームタイプをconsoleからfileに変更します。コンソール出力はバッファリングされませんが、ファイル出力はバッファリングされます。プログラムが標準出力デバイス(ファイル)をフラッシュするまで、テキストはバッファリングのしきい値に達するまでバッファリングを続けます。 「output\n」というテキストが2秒ごとに出力され、しきい値が4,096バイトの場合、プログラムからの出力がファイルに表示されるまでに20分近くかかります。