3

我有一个运行 mysqld 和 fork 以继续运行的服务器脚本。举个例子:

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

为什么 tee 等待子进程结束才结束?

编辑:

例如,以下始终挂起:

./myscript | tee -a logfile.log
4

1 回答 1

5

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

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

如果您想tee在父脚本退出时退出,您应该将子脚本的输出重定向(到文件或/dev/null例如)。

于 2013-09-03T14:58:19.967 回答