J’essaie de comprendre à la fois l’ordre d’exécution d’une ligne de code qui m’a été donnée précédemment et la création de processus à l’aide de l’appel système fork()
. Il est en langage C pour s’exécuter sous UNIX.
Je comprends le concept principal de fork()
, néanmoins, je veux comprendre la création de l’arborescence de processus dérivée de la ligne de code suivante:
x = fork() || !fork();
Toute aide est la bienvenue!
Le processus parent initial qui exécute le code (disons que c’est le PID = 1000
), exécute la partie x = fork()
et génère un nouveau processus fils (disons PID = 1001
).
Pour le processus PID = 1000
, la valeur de l’expression logique est jusqu’ici non nulle, car fork(2)
renvoie le pid
son enfant. Ainsi, en raison d’ une évaluation de court-circuit , la partie restante de l’expression logique n’est pas évaluée car elle n’est pas nécessaire.
Pour le processus PID = 1001
, la valeur de l’expression logique jusqu’à présent est 0
, car dans le cas du nouveau processus créé, fork(2)
renvoie 0
; il doit donc aussi évaluer la partie restante de l’expression logique. Il exécute la partie !fork()
, générant un nouveau processus (disons PID = 1002
).
L’arbre de processus dérivé est le suivant:
1000 | | 1001 | | 1002
La réponse de chrk est géniale, en outre, fork()
renvoie 2 fois, l’une est pid du processus enfant dans le processus parent, l’autre 0 est renvoyée du processus enfant. Les deux processus continuent à traiter après le retour de fork()
.