Jawaban:
Variabel '$$' berisi PID.
gunakan $BASHPID
atau$$
Lihat manual untuk informasi lebih lanjut, termasuk perbedaan di antara keduanya.
TL; DRTFM
$$
Memperluas ID proses dari shell.
()
subkulit, itu mengembang ke ID proses shell yang memohon, bukan subkulit.$BASHPID
Memperluas ID proses dari proses Bash saat ini.
()
subkulit, ia mengembang ke ID proses dari subkulit tersebut$BASHPID
ini baru untuk BASH 4. Jika Anda menggunakan BASH 3.x, Anda harus menggunakan$$
Selain contoh yang diberikan dalam Panduan Script Bash Lanjutan yang dirujuk oleh Jefromi , contoh ini menunjukkan bagaimana pipa membuat subkulit:
$ 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
). String ini disebut sebagai "string di sini".
PID disimpan di $$
.
Contoh: kill -9 $$
akan membunuh contoh shell dari mana ia dipanggil.
kill -9
(dengan -9
bendera) dianggap berbahaya dan hanya digunakan jika benar-benar diperlukan).
kill -9 $$
tepat 1 hal. Itu membunuh proses shell saat ini . Ini berguna jika Anda telah melakukan sesuatu dalam sesi shell yang tidak ingin Anda tulis .bash_history
Suka:docker run -e PASSWORD=hunter2 ircbot
Anda bisa menggunakan $$
variabel.
Jika prosesnya adalah proses anak dan $ BASHPID tidak disetel, dimungkinkan untuk meminta ppid dari proses anak yang dibuat dari proses yang berjalan. Mungkin agak jelek, tapi berhasil. Contoh:
sleep 1 &
mypid=$(ps -o ppid= -p "$!")