Ho un problema con Bash e non so perché.
Sotto shell, entro:
echo $$ ## print 2433
(echo $$) ## also print 2433
(./getpid) ## print 2602
"getpid" è un programma C per ottenere il pid corrente, come:
int main() { printf("%d", (int)getpid()); return 0; }
Ciò che mi confonde è che:
- Penso che "(comando)" sia un sottoprocesso (ho ragione?), E penso che il suo pid dovrebbe essere diverso dal pid genitore, ma sono gli stessi, perché ...
- quando uso il mio programma per mostrare il pid tra parentesi, il pid che mostra è diverso, giusto?
- '$$' è qualcosa come macro?
Mi potete aiutare?
echo $$ $BASHPID ; ( echo $$ $BASHPID )
dimostra. Le parentesi tonde creano una subshell. Le istruzioni possono modificare i valori delle variabili e la shell padre non deve vedere tali modifiche. Questo è implementato come fork()
un'operazione.
getpid
mostrerebbe un ID processo diverso anche se non fosse eseguito in una subshell.