J'ai un problème avec Bash et je ne sais pas pourquoi.
Sous coquille, j'entre:
echo $$ ## print 2433
(echo $$) ## also print 2433
(./getpid) ## print 2602
"getpid" est un programme C pour obtenir le pid actuel, comme:
int main() { printf("%d", (int)getpid()); return 0; }
Ce qui me trouble, c'est que:
- Je pense que "(commande)" est un sous-processus (ai-je raison?), Et je pense que son pid devrait être différent de son pid parent, mais ils sont les mêmes, pourquoi ...
- quand j'utilise mon programme pour afficher pid entre parenthèses, le pid qu'il montre est différent, n'est-ce pas?
- '$$' est-il quelque chose comme une macro?
Pouvez-vous m'aider?
echo $$ $BASHPID ; ( echo $$ $BASHPID )
démontre que c'est le cas. Les crochets ronds créent un sous-shell. Les instructions peuvent changer les valeurs des variables et le shell parent ne doit pas voir ces changements. Ceci est implémenté comme une fork()
opération.
getpid
cela afficherait un ID de processus différent même s'il n'était pas exécuté dans un sous-shell.