Estoy leyendo "BASH guía de bolsillo de Oreilly". Decía:
El ID del proceso del proceso Bash actual. En algunos casos, esto puede diferir de $$.
Por encima de la explicación, explicada $BASHPID
variable.
Pregunta: ¿ qué casos?
Estoy leyendo "BASH guía de bolsillo de Oreilly". Decía:
El ID del proceso del proceso Bash actual. En algunos casos, esto puede diferir de $$.
Por encima de la explicación, explicada $BASHPID
variable.
Pregunta: ¿ qué casos?
Respuestas:
Se proporciona un ejemplo en la BASHPID
descripción de la página de manual de 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.
Aquí hay un ejemplo de una subshell que muestra el contenido de la variable, junto con $$
y el contenido BASHPID
externo de la 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
Subcapas. $$
POSIX especifica y siempre permanece el valor del proceso de shell original. $BASHPID
es una variable específica de Bash y siempre es el valor del proceso desde el que se desreferencia la variable, contando subcapas.
$ 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
Logré convencer al mantenedor de mksh para agregar BASHPID
a la versión más reciente, por lo que es algo portátil. También es posible implementarlo BASHPID
en ksh93 usted mismo en muchas plataformas.
$BASHPID
es nuevo en BASH 4. Si está utilizando BASH 3.x, debe usar$$