为什么T恤等待所有的子壳完成?

时间:2013-09-03 14:44:56

标签: bash pipeline tee subshell

我有一个服务器脚本运行mysqld并且forks继续运行。举个例子:

./mysqld <parameters> &
echo "Parent runs next line in script."
<do more stuff>

为什么tee在结束之前等待子进程结束?

编辑:

例如,以下内容始终挂起:

./myscript | tee -a logfile.log

1 个答案:

答案 0 :(得分:5)

因为如果子进程仍在运行(并且仍然打开其标准输出),它无法确定它是否已经完成所有输出。

由于父和子使用相同的标准输出(由于管道而连接到tee的输入),tee无法区分它们。由于它消耗所有输入,因此父和子必须在tee看到和输入结束条件之前关闭其标准输出(或终止)。

如果您希望在父脚本执行时退出tee,则应将子项的输出重定向到(例如文件或/dev/null)。