2013-06-28 113 views
15

我相信我可以從父進程派生10個子進程。如何在shell腳本中從分叉子進程獲取進程ID(pid)

下面是我的代碼:

#/bin/sh 
fpfunction(){ 
n=1 
while (($n<20)) 
do 

     echo "Hello World-- $n times" 
     sleep 2 
     echo "Hello World2-- $n times" 
     n=$((n+1)) 
done 
} 

fork(){ 
    count=0 
    while (($count<=10)) 
    do 
     fpfunction & 
     count=$((count+1)) 
    done 
} 

fork 

但是,我怎麼可以從我剛剛創建的每個子進程的PID?

謝謝。

回答

35

背景子進程的PID存儲在$!中。

fpfunction & 
child_pid=$! 
parent_pid=$$ 

對於反過來,使用$PPID從子級獲取父進程的PID。

fpfunction() { 
    local child_pid=$$ 
    local parent_pid=$PPID 
    ... 
} 

也爲它的價值,你可以在循環語句組合成一個單一的類C for循環:

for ((n = 1; n < 20; ++n)); do 
do 
    echo "Hello World-- $n times" 
    sleep 2 
    echo "Hello World2-- $n times" 
done 
+0

@qwwqwwq它移植到任何兼容sh的外殼,不要」你需要bash。 –

5

Bash manual

!

擴展爲最近執行的後臺(異步)命令的進程ID。

即,使用$!