$ BASHPID E $$ differiscono in alcuni casi


10

Sto leggendo "BASH guida tascabile di Oreilly". Ha detto:

L'ID processo del processo Bash corrente. In alcuni casi, questo può differire da $$.

Sopra la spiegazione, ha spiegato la $BASHPIDvariabile.

Domanda: quali casi?


1
Va notato che $BASHPIDè una novità di BASH 4. Se si utilizza BASH 3.x, è necessario utilizzare$$
Bruno Bronosky

Risposte:


19

Un esempio è fornito nella BASHPIDdescrizione della manpage di bash:

   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.

Ecco un esempio di una subshell che mostra il contenuto della variabile, insieme a $$e il contenuto BASHPIDesterno della subshell.

$ 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

Subshell. $$è specificato da POSIX e rimane sempre il valore del processo shell originale. $BASHPIDè una variabile specifica di Bash, ed è sempre il valore del processo da cui la variabile viene referenziata, contando i subshell.

 $ 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

Sono riuscito a convincere il manutentore di mksh ad aggiungerlo BASHPIDalla versione più recente, quindi è in qualche modo portatile. È anche possibile implementare BASHPIDte stesso in ksh93 su molte piattaforme.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.