$ BASHPID Et $$ diffèrent dans certains cas


10

Je lis "BASH pocket guide of Oreilly". Ça disait:

ID de processus du processus Bash en cours. Dans certains cas, cela peut différer de $$.

Explication ci-dessus, $BASHPIDvariable expliquée .

Question: quels cas?


1
Il convient de noter que $BASHPIDc'est nouveau pour BASH 4. Si vous utilisez BASH 3.x, vous devez utiliser$$
Bruno Bronosky

Réponses:


19

Un exemple est fourni dans la BASHPIDdescription de la page de manuel 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.

Voici un exemple de sous-shell qui affiche le contenu de la variable, ainsi que $$le contenu de l' BASHPIDextérieur du sous-shell.

$ 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

Sous-coquilles. $$est spécifié par POSIX et reste toujours la valeur du processus shell d'origine. $BASHPIDest une variable spécifique à Bash, et est toujours la valeur du processus à partir duquel la variable est déréférencée, en comptant les sous-coquilles.

 $ 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

J'ai réussi à convaincre le mainteneur mksh d'ajouter BASHPIDà la version la plus récente, donc c'est un peu portable. Il est également possible de l'implémenter BASHPIDvous-même dans ksh93 sur de nombreuses plateformes.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.