$ BASHPID Dan $$ berbeda dalam beberapa kasus


10

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, $BASHPIDvariabel yang dijelaskan .

Pertanyaan: kasus apa?


1
Perlu dicatat bahwa $BASHPIDini baru untuk BASH 4. Jika Anda menggunakan BASH 3.x, Anda harus menggunakan$$
Bruno Bronosky

Jawaban:


19

Contoh diberikan dalam BASHPIDdeskripsi 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 BASHPIDluar 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

14

Subkulit. $$ditentukan oleh POSIX dan selalu menjadi nilai dari proses shell asli. $BASHPIDadalah 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 BASHPIDke versi terbaru, jadi ini agak portable. Dimungkinkan juga untuk mengimplementasikan BASHPIDdi ksh93 sendiri di banyak platform.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.