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 $BASHPIDvariable.
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 $BASHPIDvariable.
Pregunta: ¿ qué casos?
Respuestas:
Se proporciona un ejemplo en la BASHPIDdescripció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 BASHPIDexterno 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. $BASHPIDes 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 BASHPIDa la versión más reciente, por lo que es algo portátil. También es posible implementarlo BASHPIDen ksh93 usted mismo en muchas plataformas.
$BASHPIDes nuevo en BASH 4. Si está utilizando BASH 3.x, debe usar$$