I have a script in Bash called Script.sh
, and it needs to know its own PID (i.e. I need to get PID inside the Script.sh )
Any idea how to do this ?
変数$$
にはPIDが含まれています。
使用$BASHPID
または$$
2つの違いを含む詳細については、[マニュアル][1]を参照してください。
TL; DRTFM
$$
シェルのプロセスIDに展開されます。
()
サブシェルではなく、呼び出し元のシェルのプロセスIDに展開されます。$BASHPID
現在のBashプロセスのプロセスIDに展開されます(bash 4の新機能)。
()
サブシェルでは、サブシェルのプロセスIDに展開されます[1]:http : //www.gnu.org/software/bash/manual/bashref.html#Bash-VariablesJefromiが参照するAdvancedBashScripting Guideに示されている例に加えて、これらの例は、パイプがサブシェルを作成する方法を示しています。
$ 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 "$!")
どこにいても(インタラクティブなコマンドラインまたはスクリプトで)、$ BASHPIDにアクセスできない場合は、次の方法で現在のシェルpidにアクセスできます。
bash -c'echo $ PPID'
時期尚早の文字列解釈を防ぐために単純な引用符が不可欠な場合(解釈が現在のプロセスではなく子プロセスで確実に行われるようにするため)。原則は、子プロセスを作成し、その親pid、つまり「自分」を要求することです。このコードは、psベースのJoakimソリューションよりも単純です。