BashにはScript.sh
というスクリプトがあり、独自のPIDを知る必要があります(つまり、Script.sh内でPIDを取得する必要があります)
これを行う方法はありますか?
変数 '$$'にはPIDが含まれています。
$BASHPID
または$$
を使用します
2つの違いを含む詳細については、 manual を参照してください。
TL; DRTFM
$$
は、シェルのプロセスIDに展開されます。()
サブシェルでは、サブシェルではなく、呼び出しシェルのプロセスIDに展開されます。$BASHPID
は、現在のBashプロセスのプロセスIDに展開されます。()
サブシェルでは、サブシェルのプロセスIDに展開されますAdvanced Bash Scripting GuideJefromiで参照される例に加えて、これらの例はパイプがサブシェルを作成する方法を示しています。
$ echo $$ $BASHPID | cat -
11656 31528
$ echo $$ $BASHPID
11656 11656
$ echo $$ | while read line; do echo $line $$ $BASHPID; done
11656 11656 31497
$ while read line; do echo $line $$ $BASHPID; done <<< $$
11656 11656 11656
PIDは$$
に保存されます。
例:kill -9 $$
は、呼び出し元のシェルインスタンスを強制終了します。
$$
変数を使用できます。
プロセスが子プロセスであり、$ BASHPIDが設定されていない場合、実行中のプロセスの作成された子プロセスのppidを照会することができます。少しいかもしれませんが、動作します。例:
sleep 1 &
mypid=$(ps -o ppid= -p "$!")