Estou lendo "Guia de bolso BASH de Oreilly". Dizia:
O ID do processo atual do Bash. Em alguns casos, isso pode ser diferente de $$.
Explicação acima, $BASHPID
variável explicada .
Pergunta: quais casos?
Estou lendo "Guia de bolso BASH de Oreilly". Dizia:
O ID do processo atual do Bash. Em alguns casos, isso pode ser diferente de $$.
Explicação acima, $BASHPID
variável explicada .
Pergunta: quais casos?
Respostas:
Um exemplo é fornecido na BASHPID
descriçã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 BASHPID
fora do 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
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 2
2: 31490, 31490
1: 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 BASHPID
você mesmo no ksh93 em várias plataformas.
$BASHPID
é novo para bater 4. Se você estiver usando BASH 3.x, você tem que usar$$