L' fork()
primitives souvent s'étend de l'imagination. Jusqu'à ce que vous obtenez une sensation pour lui, vous devez tracer sur le papier ce que chaque opération et compte pour le nombre de processus. N'oubliez pas que fork() crée un quasi-parfaite copie de la processus actuel. La différence la plus importante (pour la plupart) n'est qu' fork()
s'valeur de retour est différente entre le parent et l'enfant. (Étant donné que ce code ignore la valeur de retour, il ne fait pas de différence.)
Donc, au début, il y a un processus. Qui crée un second processus, à la fois de qui imprimer une dot et de la boucle. Sur leur deuxième itération, chacun crée une autre copie, il y a donc quatre processus d'impression en un point, puis sur quitter. Donc, nous pouvons facilement compte pour six points, comme vous vous attendez.
Cependant, ce printf()
n'a vraiment est un tampon de sa sortie. Donc, le premier point à partir de quand il n'y avait que deux processus ne s'affiche pas lors de l'écrit. Ces points restent dans la mémoire tampon qui est dupliqué à fork(). Il n'est pas jusqu'à ce que le processus est sur le point de sortie de la mémoire tampon point apparaît. Quatre processus de l'impression d'un tampon dot, en plus de la nouvelle donne 8 points.
Si vous vouliez éviter ce comportement, appelez - fflush(stdout);
après printf()
.