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, $BASHPID
variable expliquée .
Question: quels cas?
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, $BASHPID
variable expliquée .
Question: quels cas?
Réponses:
Un exemple est fourni dans la BASHPID
description 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' BASHPID
exté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
Sous-coquilles. $$
est spécifié par POSIX et reste toujours la valeur du processus shell d'origine. $BASHPID
est 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 BASHPID
vous-même dans ksh93 sur de nombreuses plateformes.
$BASHPID
c'est nouveau pour BASH 4. Si vous utilisez BASH 3.x, vous devez utiliser$$