Saya sedang membaca "BASH pocket guide of Oreilly". Itu berkata:
ID proses dari proses Bash saat ini. Dalam beberapa kasus, ini dapat berbeda dari $$.
Penjelasan di atas, $BASHPID
variabel yang dijelaskan .
Pertanyaan: kasus apa?
Saya sedang membaca "BASH pocket guide of Oreilly". Itu berkata:
ID proses dari proses Bash saat ini. Dalam beberapa kasus, ini dapat berbeda dari $$.
Penjelasan di atas, $BASHPID
variabel yang dijelaskan .
Pertanyaan: kasus apa?
Jawaban:
Contoh diberikan dalam BASHPID
deskripsi bash manpage:
BASHPID
Expands to the process id of the current bash process. This
differs from $$ under certain circumstances, such as subshells
that do not require bash to be re-initialized.
Berikut ini adalah contoh dari subkulit yang mengeluarkan konten variabel, bersama dengan $$
dan isi di BASHPID
luar subkulit.
$ echo $(echo $BASHPID $$) $$ $BASHPID
25680 16920 16920 16920
# | | | |
# | | | -- $BASHPID outside of the subshell
# | | -- $$ outside of the subshell
# | -- $$ inside of the subshell
# -- $BASHPID inside of the subshell
Subkulit. $$
ditentukan oleh POSIX dan selalu menjadi nilai dari proses shell asli. $BASHPID
adalah variabel spesifik-Bash, dan selalu merupakan nilai proses dari mana variabel didereferensi, menghitung subkulit.
$ f() { printf '%s: %d, %d\n' "$1" $$ $BASHPID; };
$ ${BASH_VERSION+shopt -s lastpipe}; set +m;
$ f 1 >&2 | f 2
2: 31490, 31490
1: 31490, 32545
Saya berhasil meyakinkan pengelola mksh untuk menambahkan BASHPID
ke versi terbaru, jadi ini agak portable. Dimungkinkan juga untuk mengimplementasikan BASHPID
di ksh93 sendiri di banyak platform.
$BASHPID
ini baru untuk BASH 4. Jika Anda menggunakan BASH 3.x, Anda harus menggunakan$$