Linux Bash分叉一个子壳
我有一个bash脚本,其中我想在一个分叉进程中运行一些无关的命令。这些命令应仅在分叉进程中运行,而其他命令应仅在父进程中运行Linux Bash分叉一个子壳,linux,bash,shell,fork,Linux,Bash,Shell,Fork,我有一个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" #!/bin/bash echo "I am parent statement 1"
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"
#!/bin/bash
echo "I am parent statement 1"
( echo "I am child statement 1"; echo "I am child statement 2"; sleep 30) &
jobs -l
echo "I am parent statement 2"
echo $$
在本例中,父shell是否只输出“parent”语句,而子shell是否只回显“child语句”?或者返回时,子语句是否会回显父语句2
同时,父母是否会等待孩子(睡30分钟)?还是父进程退出,子进程继续运行30秒?每个进程只运行自己的语句 如果你稍微修改一下脚本,你可以做一个实验,证明孩子比父母活得长
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"
#!/bin/bash
echo "I am parent statement 1"
( echo "I am child statement 1"; echo "I am child statement 2"; sleep 30) &
jobs -l
echo "I am parent statement 2"
echo $$
如果您运行脚本,然后对父项和子项执行
ps aux | grep
,您将看到父项已死亡,而子项仍活着。为什么不运行脚本并查看?您可以很容易地将pid添加到每个echo中,以查看哪个进程正在发出它。我尝试过-但是从输出中不清楚哪个shell正在输出什么。我不知道如何将一些输出发送到一个窗口,将一些输出发送到另一个echo“$$:I am parent statement 2”
,它将在pid前面加上pid,这将帮助您轻松识别它的来源。好的-尝试一下。我也不知道父shell是否仍然在等待子shell完成。但是返回了控件(我看到bash提示符)。不知道该怎么解释,在孩子睡觉后给他打个字。您将看到它在父级退出后很长一段时间内被打印(返回提示符)。这应该会给你答案。这不适用于你显示的代码,但请注意,子shell(bash中的子进程)中的$
是伪造的。您可以使用(echo$$;ps)
查看效果,可以使用尾随的&
或不使用尾随的。