Estou com um problema com o Bash e não sei por que.
Sob shell, insiro:
echo $$ ## print 2433
(echo $$) ## also print 2433
(./getpid) ## print 2602
"getpid" é um programa em C para obter o pid atual, como:
int main() { printf("%d", (int)getpid()); return 0; }
O que me confunde é o seguinte:
- Eu acho que "(comando)" é um subprocesso (estou certo?), E acho que seu pid deve ser diferente do pid pai, mas são os mesmos, por que ...
- Quando eu uso meu programa para mostrar pid entre parênteses, o pid mostra é diferente, está certo?
- '$$' é algo como macro?
Pode me ajudar?
echo $$ $BASHPID ; ( echo $$ $BASHPID )
demonstra que sim. Parênteses arredondados criam um subshell. As instruções podem alterar os valores das variáveis e o shell pai não deve ver essas alterações. Isso é implementado como uma fork()
operação.
getpid
mostraria um ID de processo diferente, mesmo que não fosse executado em um subshell.