2016-12-23 26 views
0

我有一个bash脚本,我想在分叉的进程中运行一些不相关的命令。这些命令只能运行在分叉进程中,而其他命令只能运行在父进程中。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'语句,子只回显'子语句'?或者,孩子回来后是否会回应父母陈述2?

同样,父母会等待孩子(做一个睡眠30)?或者父母的出口和孩子会继续跑30秒?

+4

你为什么不跑它看?您可以轻松地将pid添加到每个回显中,以查看哪个进程正在发送它。 – kaylum

+0

我试过 - 但是从输出哪个shell输出什么不清楚。我不知道如何发送一些输出到一个窗口,有些到另一个窗口 – TSG

+0

'echo“$$:我是父母声明2”'这将预先加上pid,这将帮助您轻松识别它来自哪里。 – kaylum

回答

0

每个进程只会运行自己的语句。

如果您稍微修改脚本,则可以执行一个实验,显示该孩子超过父母。

#!/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>,你会看到父母已经去世,而孩子住在。

+0

这不适用于您显示的代码,但请注意,子窗口(bash中的子进程)中的$$ $$是伪造的。你可以用'(echo $$; ps)'看到效果,有或没有尾随'&'。 – cdarke