web-dev-qa-db-ja.com

プロセスがバックグラウンドで実行されている場合、stdoutをファイルにリダイレクトします

プログラムがバックグラウンドで実行されているときに、プログラムのstdoutをファイルにリダイレクトするにはどうすればよいですか?

私は毎秒出力を生成するプログラムを持っています。通常どおり実行してファイルにリダイレクトすると、期待どおりにそのファイルに出力が表示されます。

#./program > file.txt
#cat file.txt
 output
 output
 output
#

バックグラウンドで同じことを行おうとすると、ファイルは空のままになります。

#./program > file.txt &
#cat file.txt
#
3
Rauffle

sh -c './program > file.txt; cat file.txt' &はどうですか?

3
Xiè Jìléi

Stdoutをテキストファイルにリダイレクトする場合、ストリームタイプをconsoleからfileに変更します。コンソール出力はバッファリングされませんが、ファイル出力はバッファリングされます。プログラムが標準出力デバイス(ファイル)をフラッシュするまで、テキストはバッファリングのしきい値に達するまでバッファリングを続けます。 「output\n」というテキストが2秒ごとに出力され、しきい値が4,096バイトの場合、プログラムからの出力がファイルに表示されるまでに20分近くかかります。

2
user251069