2016-12-23 30 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