181

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 ?

4

7 に答える 7

282

変数$$にはPIDが含まれています。

于 2010-03-22T15:53:45.803 に答える
84

使用$BASHPIDまたは$$

2つの違いを含む詳細については、[マニュアル][1]を参照してください。

TL; DRTFM

  • $$シェルのプロセスIDに展開されます。
    • サブシェルでは、()サブシェルではなく、呼び出し元のシェルのプロセスIDに展開されます。
  • $BASHPID現在のBashプロセスのプロセスIDに展開されます(bash 4の新機能)。
于 2010-03-22T15:53:39.360 に答える
40

Jefromiが参照する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
于 2010-03-22T17:55:34.223 に答える
9

PIDはに保存され$$ます。

例:kill -9 $$呼び出し元のシェルインスタンスを強制終了します。

于 2010-03-22T15:55:54.807 に答える
6

$$変数を使用できます。

于 2010-03-22T15:54:00.983 に答える
1

プロセスが子プロセスであり、$ BASHPIDが設定されていない場合、実行中のプロセスの作成された子プロセスのppidを照会することができます。少し醜いかもしれませんが、動作します。例:

sleep 1 &
mypid=$(ps -o ppid= -p "$!")
于 2019-01-25T11:58:14.063 に答える
1

どこにいても(インタラクティブなコマンドラインまたはスクリプトで)、$ BASHPIDにアクセスできない場合は、次の方法で現在のシェルpidにアクセスできます。

bash -c'echo $ PPID'

時期尚早の文字列解釈を防ぐために単純な引用符が不可欠な場合(解釈が現在のプロセスではなく子プロセスで確実に行われるようにするため)。原則は、子プロセスを作成し、その親pid、つまり「自分」を要求することです。このコードは、psベースのJoakimソリューションよりも単純です。

于 2021-11-25T08:29:39.600 に答える