2013-06-28 28 views
15

親プロセスから10個の子プロセスをフォークできると思います。以下はシェルスクリプトでフォークされた子プロセスからプロセス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を得ることができますか?

ありがとうございました。 Bash manualから

答えて

35

背景の子プロセスのPIDは$!に格納されます。

fpfunction & 
child_pid=$! 
parent_pid=$$ 

逆の場合は、$PPIDを使用して、親プロセスのPIDを子から取得します。

何が価値がある、あなたはループのために、単一のC-ようにループ文を組み合わせることができますためまた
fpfunction() { 
    local child_pid=$$ 
    local parent_pid=$PPID 
    ... 
} 

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

それは任意のSH-互換シェル、ドン」へのポータブルです@qwwqwwq bashが必要です。 –

5

!

は、最後に実行されたバックグラウンド(非同期)コマンドのプロセスIDに展開されます。

つまり、$!を使用します。

関連する問題