当进程在后台运行时将标准输出重定向到文件

当进程在后台运行时将标准输出重定向到文件

当程序在后台运行时,如何将其标准输出重定向到文件?

我有一个程序每秒生成一次输出。当我正常运行它并重定向到文件时,输出会按预期出现在该文件中:

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

当我尝试在后台执行同样的事情时,该文件将保持为空:

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

答案1

关于什么sh -c './program > file.txt; cat file.txt' &

答案2

将 stdout 重定向到文本文件时,您正在将流类型从安慰文件。控制台输出是非缓冲的,而文件输出是缓冲的。在程序刷新 stdout 设备(文件)之前,文本将继续缓冲,直到达到缓冲阈值。如果每 2 秒打印一次文本“output\n”,并且阈值为 4,096 字节,则需要近 20 分钟才能在文件中看到程序的任何输出。

相关内容