【发布时间】:2016-12-23 03:43:33
【问题描述】:
我有一个 bash 脚本,我想在分叉的进程中运行一些不相关的命令。这些命令应该只在派生进程中运行,而其他命令应该只在父进程中运行。
echo "I am parent statement 1"
( echo "I am child statement 1"; echo "I am child statement 2"; sleep 30) &
echo "I am parent statement 2"
在这个例子中,父shell是否只输出'parent'语句,而子shell只回显'child statements'?或者孩子会在返回时回显父语句2?
同样,父母会等待孩子(睡 30 分钟)吗?还是父母退出,孩子继续跑30秒?
【问题讨论】:
-
你为什么不运行它看看?您可以轻松地将 pid 添加到每个 echo 中,以查看哪个进程正在发出它。
-
我试过了——但从输出中并不清楚哪个 shell 正在输出什么。而且我不确定如何将一些输出发送到一个窗口,一些输出到另一个窗口
-
echo "$$: I am parent statement 2"前面会加上 pid,这将帮助您轻松识别它的来源。 -
好的 - 会尝试的。我也无法判断父 shell 是否还活着等待子 shell 完成。但是控制权被返回(我看到了 bash 提示符)。不知道如何解释
-
睡后在孩子身上打印。您将看到它在父级退出后的一段时间内打印出来(返回到提示符)。那应该会给你答案。