私はRH Linuxシステムでbashを使用しています。
通常、$$変数を使用して独自のPIDを取得できます。ただし、スクリプトが独自の機能の1つをバックグラウンドプロセスとして実行している場合、$$を使用すると機能しなくなり、バックグラウンドで実行されるすべての関数は親スクリプトのPIDを取得します。
たとえば、次はテストスクリプトです。
/tmp/test:
#!/bin/bash
echo "I am $$"
function proce {
sleep 3
echo "$1 :: $$"
}
for x in aa bb cc; do
eval "proce $x &"
echo "Started: $!"
done
実行時:
/tmp$ ./test
I am 5253
Started: 5254
Started: 5256
Started: 5258
/tmp$ aa :: 5253
bb :: 5253
cc :: 5253
したがって、親スクリプト(/ tmp / test)はPID 5253で実行され、PID 5254、5256、および5258で3つのバックグラウンドプロセスを開始します。ただし、これらの各バックグラウンドプロセスは$$で5253の値を取得します。
これらのプロセスは実際のPIDをどのように見つけますか?
ベストアンサー1
$BASHPID
あなたが探しているものかもしれません。
バッシュPID
現在、BashプロセスのプロセスIDに展開されます。これは、Bashを再初期化する必要がないサブシェルなどの場合によって$ $とは異なります。
相対的な$$
($$) はシェルのプロセス ID に展開されます。 ()サブシェルでは、サブシェルではなく呼び出しシェルのプロセスIDに展開されます。
http://www.gnu.org/software/bash/manual/bashref.html#Bash-変数