Comment fait - on alors pour savoir si on est dans le processus père ou fils??
C'est justement une bizzarerie que je n'arrive jamais à me représenter dans son fonctionnement.
Comme décris dans le man fork(2)
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/fork.2.html
Le truc est assez simple, on fait un appel à fork qui retourne un pid.
Et c'est là que c'est bizzare: si le pid est égal à 0, on est dans le processus fils, on doit donc executer les instructions propres au fils, et si le pid est supérieur à zero, on est dans le processus père et on doit donc prévoir les instructiions en conséquence.
Voilà ce que ça donne dans l'exemple donné par le lien donné plus haut:
pid_t pid;
pid = fork ();
if (pid > 0) {
/* Processus père */
} else if (pid == 0) {
/* Processus fils */
} else {
/* Traitement d'erreur */
}
Moi ce truc ça me chiffonne. Le code est sensé être executé de façon linéaire, et là les deux blocs conditionnels corrects sont vérifiés, c'est à dire que tantôt pid ==0 et tantôt pid > 0. Si tu fais une boucle infinie de printf sur ce pid, tu verras que sa valeur change de zero à un autre nombre supérieur à zero.
Normalement si pid == valeur (même si valeur varie de temps en temps) alors seul le bloc conditionnel correspondant à la valeur actuelle sera executé. Les autres seront ignorés. Ca c'est du code linéaire traditionnel. Mais ici pid varie et en plus ses deux valeurs sont prises en compte dans le bloc de conditions...
C'est un mystère pour moi ce truc :-s