回答:
使用する $BASHPID
または$$
2つの違いを含む詳細については、マニュアルを参照してください。
TL; DRTFM
$$
シェルのプロセスIDに展開します。
()
サブシェルは、起動したシェルではなく、サブシェルのプロセスIDに展開されます。$BASHPID
現在のBashプロセスのプロセスIDに展開されます。
()
サブシェル、それはサブシェルのプロセスIDに展開されます$BASHPID
BASH 4. BASH 3.xを使用している場合は、新規にあり、あなたが使用する必要があります$$
Jefromiが参照する『Advanced Bash Scripting 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
stdin
)にリダイレクトします。文字列は「ここの文字列」と呼ばれます。
PIDはに保存され$$
ます。
例:kill -9 $$
呼び出し元のシェルインスタンスを強制終了します。
kill -9
(-9
フラグ付き)は有害であると見なされ、絶対に必要な場合にのみ使用されます)。
kill -9 $$
は正確に1つのことを行います。現在のシェルプロセスを強制終了します。あなたがに書かれたくないことをシェルセッションで何かを行っている場合に便利である.bash_history
ように:docker run -e PASSWORD=hunter2 ircbot
$$
変数を使用できます。
プロセスが子プロセスであり、$ BASHPIDが設定されていない場合、実行中のプロセスの作成された子プロセスのppidを照会できます。少し見苦しいかもしれませんが、動作します。例:
sleep 1 &
mypid=$(ps -o ppid= -p "$!")