Comprendre l’appel système fork sous UNIX

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() .