我有一个服务器脚本运行mysqld并且forks继续运行。举个例子:
./mysqld <parameters> &
echo "Parent runs next line in script."
<do more stuff>
为什么tee在结束之前等待子进程结束?
编辑:
例如,以下内容始终挂起:
./myscript | tee -a logfile.log
答案 0 :(得分:5)
因为如果子进程仍在运行(并且仍然打开其标准输出),它无法确定它是否已经完成所有输出。
由于父和子使用相同的标准输出(由于管道而连接到tee
的输入),tee
无法区分它们。由于它消耗所有输入,因此父和子必须在tee
看到和输入结束条件之前关闭其标准输出(或终止)。
如果您希望在父脚本执行时退出tee
,则应将子项的输出重定向到(例如文件或/dev/null
)。