子プロセス自体から子プロセスのpidをどのように取得できますか?
foo()
{
echo pid=$$
echo spid=$!
echo bpid=$BASHPID
}
echo PARENT_PID=$$
foo &
wait
初めて実行すると、次のような結果が得られます。
PARENT_PID=17112
[1] 17512
pid=17112
spid=
bpid=
私はspid 17512を見ると予想しました。
2番目に実行すると、奇妙な現象が発生します。
PARENT_PID=17112
[1] 17797
pid=17112
spid=17512 #why I see here pid of previous subprocess???
bpid=
17797を見ると予想しましたが、17512が出ました!
したがって、2つの質問があります。 1)どのようにサブプロセスの内部からサブプロセスのpidを取得しますか? (Fooを複数回実行し、各サブプロセスのpidを見ることを期待しています。)
2)2番目の実行で予期しない結果が出るのはなぜですか?
答え1
POSIX 標準定義は$$
常に基本シェルの pid です。
プロセスがバックグラウンドで実行されている場合は、$!
最後のバックグラウンドプロセスのpidを返します。