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

nev*_*gqs 3 bash pipeline tee subshell

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

./mysqld <parameters> &
echo "Parent runs next line in script."
<do more stuff>
Run Code Online (Sandbox Code Playgroud)

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

编辑:

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

./myscript | tee -a logfile.log
Run Code Online (Sandbox Code Playgroud)

dav*_*mac 5

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

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

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