Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Bash分叉一个子壳_Linux_Bash_Shell_Fork - Fatal编程技术网

Linux 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"

我有一个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 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)
查看效果,可以使用尾随的
&
或不使用尾随的