web-dev-qa-db-ja.com

Linux / Unix Bashスクリプトはどのようにして自身のPIDを知るのですか?

BashにはScript.shというスクリプトがあり、独自のPIDを知る必要があります(つまり、Script.sh内でPIDを取得する必要があります)

これを行う方法はありますか?

124
Debugger

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

203
Paul Tomblin

$BASHPIDまたは$$を使用します

2つの違いを含む詳細については、 manual を参照してください。

TL; DRTFM

  • $$は、シェルのプロセスIDに展開されます。
    • ()サブシェルでは、サブシェルではなく、呼び出しシェルのプロセスIDに展開されます。
  • $BASHPIDは、現在のBashプロセスのプロセスIDに展開されます。
    • ()サブシェルでは、サブシェルのプロセスIDに展開されます
48
tvanfosson

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
32

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

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

6
neo

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

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

sleep 1 &
mypid=$(ps -o ppid= -p "$!")
0
Joakim J. Rapp