fork () exécution dans la boucle for

int main(int argc, char** argv) { int i = 0; while (i < 2) { fork(); system("ps -o pid,ppid,comm,stat"); i++; } return (EXIT_SUCCESS); } 

Quelqu’un peut-il me dire combien de fois la commande ps est exécutée avec une explication?

Je crois que la réponse est 6.

dans la première itération, fork() est appelé, divisant le processus en 2, appelant ainsi ps deux fois.

à la deuxième itération, fork est appelé à nouveau dans chaque processus. Vous avez maintenant 4 processus en cours d’exécution ps.

nombre total d’appels vers ps: 2 + 4 = 6.

6 fois.

Cela crée un arbre de processus comme celui-ci:

 A-+ |-B-+ | |-C-+ |-D 

A le fait deux fois (i = 0)

B le fait deux fois (i = 0)

C le fait une fois (i = 1)

D le fait une fois (i = 1)

Notez que mon utilisation des lettres est de les distinguer. Il n’y a pas d’ordre de sortie prévisible, car la commutation de processus n’est pas déterministe aux yeux du programmeur.

 Initial Process i == 0 -> Fork 1 system call i == 1 -> Fork 1.1 system call system call system call i == 1 -> Fork 2 system call system call 

Je compte 6, 2 du processus initial et du premier fork (4), et un de chaque processus créé lorsque i == 1 de ces 2 processus.

Bien sûr, cela suppose que vous corrigiez l’accolade d’extrémité manquante (et définissez EXIT_SUCCESS), sinon aucune, car elle ne comstackra pas. 🙂