Deve-se notar que $BASHPIDé novo para bater 4. Se você estiver usando BASH 3.x, você tem que usar$$
de Bruno Bronosky
Respostas:
19
Um exemplo é fornecido na BASHPIDdescrição da página de manual do 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.
Aqui está um exemplo de um subshell produzindo o conteúdo da variável, junto com $$e o conteúdo de BASHPIDfora do subshell.
$ echo $(echo $BASHPID $$) $$ $BASHPID
25680169201692016920# | | | |# | | | -- $BASHPID outside of the subshell# | | -- $$ outside of the subshell# | -- $$ inside of the subshell# -- $BASHPID inside of the subshell
Subshells. $$é especificado pelo POSIX e sempre permanece o valor do processo de shell original. $BASHPIDé uma variável específica do Bash e sempre é o valor do processo a partir do qual a variável é desreferenciada, contando subshells.
$ f(){ printf '%s: %d, %d\n'"$1" $$ $BASHPID;};
$ ${BASH_VERSION+shopt -s lastpipe};set+m;
$ f 1>&2| f 22:31490,314901:31490,32545
Consegui convencer o mantenedor do mksh a adicionar BASHPIDà versão mais recente, por isso é um pouco portátil. Também é possível implementar BASHPIDvocê mesmo no ksh93 em várias plataformas.
$BASHPID
é novo para bater 4. Se você estiver usando BASH 3.x, você tem que usar$$
Respostas:
Um exemplo é fornecido na
BASHPID
descrição da página de manual do bash:Aqui está um exemplo de um subshell produzindo o conteúdo da variável, junto com
$$
e o conteúdo deBASHPID
fora do subshell.fonte
Subshells.
$$
é especificado pelo POSIX e sempre permanece o valor do processo de shell original.$BASHPID
é uma variável específica do Bash e sempre é o valor do processo a partir do qual a variável é desreferenciada, contando subshells.Consegui convencer o mantenedor do mksh a adicionar
BASHPID
à versão mais recente, por isso é um pouco portátil. Também é possível implementarBASHPID
você mesmo no ksh93 em várias plataformas.fonte