Bonjour,
Je ne comprend pas la déférence entre l'utilisation de wait() dans ces deux codes :
wait() dois etre exécuter par le pére pour attendre son fils.
Pourquoi dans le 1er code il y'a un IF qui teste s'il est dans le fils ou non alors dans le 2éme est Non
Merci pour votre aide.
code 1
int main(){
int result1,result2,result3;
result1 = fork();
if(result1 == 0){
result2 = fork();
if(result2 == 0){
result3 = fork();
if(result3 >0)
wait(NULL);
}
else
wait(NULL);
}
else
wait(NULL);
}
code 2 :
int main() {
int result1, result2, result3;
result1 = fork();
result2 = fork();
result3 = fork();
if (result3) wait(NULL);
if (result2) wait(NULL);
if (result1) wait(NULL);
}
# Difference = nombre de processus
Posté par -=[ silmaril ]=- (site web personnel) . Évalué à 1.
En gros avec le premier code tu va générer 4 processus (un processus parent et 3 fils), alors que dans le le second tu va avoir 8 processus:
Le premier fork va doubler les processus, le second fork va s'executer sur les deux processus donc => on double encore, le troisième fork va s'executer sur les quatres processus => 8 processus.
[^] # Re: Difference = nombre de processus
Posté par Geek_web . Évalué à 1.
J'ai pas un probléme avec le Fork(), Je sais le nombre des processus qui va créé mais ce que je comprend pas c'est l'utilisation de wait() dans ces deux codes.
Merci
[^] # Re: Difference = nombre de processus
Posté par NeoX . Évalué à 2.
ben comme son nom l'indique, la fonction wait() sert à … attendre…
donc ton programme ouvre des processus fils, qui attendent…
au hasard, c'est parce que sinon, ils se refermeraient tout de suite, et tu n'aurais pas le temps de les apercevoir ?
# hop
Posté par delio . Évalué à 1.
Bah si
# debug
Posté par Mali (site web personnel) . Évalué à 2.
Dans ces cas là, la meilleure façon de comprendre ce qu'il se passe est d'exécuter le programme en pas à pas, via gdb par exemple.
Ou d'ajouter des logs : printf("je suis le fils, mon pid est (%d), mon père est (%d)\n", getpid(), getppid());
# deuxième code
Posté par thaddeus (site web personnel) . Évalué à 1.
Dans le deuxième code, le premier processus qui a fait trois forks fera trois waits. Le deuxième processus en fera deux. Deux processus, qui ont un fils feront un wait, et les quatre qui n ont pas de fils n en feront pas, car tous leurs results sont nuls.
[^] # Re: deuxième code
Posté par thaddeus (site web personnel) . Évalué à 1.
Ce que j'ai écrit est incorrect. Sur les huit processus il n'y en a qu'un pour lequel les trois entiers result1, result2 et result3 sont nuls. Car d'après le manuel de fork :
Les valeurs précédentes des entiers results1 et results2 sont donc aussi copiées.
Lorsqu'un processus qui a déjà un fils, forke à nouveau, le nouveau fils attendra le premier fils de son père. Cette attente n'est pas obligatoire (car le même processus sera attendu plusieurs fois), mais n'est pas bloquante non plus. cf. le manuel de wait :
Et c'est plus simple à coder ainsi.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.