Fork()

Spaki Messages postés 45 Statut Membre -  
Yoan Messages postés 11905 Statut Modérateur -
Bonjour,

J'ai un exo à rendre pour jeudi sur fork(). Le programme est à codé en C.
Il faut que je fasse un programme qui lance cinq processus fils et affiche leur PID(par un message).Chaque fils devra afficher son PID et celui de son pere (par un message) avant de s'autodetruire.

J'ai commencé à faire l'exo dont voici le code:

int main(void){
int i = 1;
pid_t pidfils;
while((i<6)&&((pidfils=fork())!=0)){
printf("Fils numero %d:PID %d\n",i,pidfils);
i++;
}

if(pidfils==0){
printf("Je suis le processus %d et mon pere est %d\n",getpid(),getppid());
}
return 0;

}


Le problème est que quand je compile , il n'y a pas d'erreur .Par contre à l'execution , il affiche core dumped.
Quelqu'un pourrait m'aider???

Merci à tous.
A voir également:

5 réponses

Spaki Messages postés 45 Statut Membre 2
 
Ok, merci pour l'explication Yoan.
Il faut qu'un meme processus pere crée 5 processus fils, donc si je met un wait il faudrait que je le place dans la boucle if du pere????
1
cornalin Messages postés 6 Statut Membre
 
Salut

Je viens de tester ton code et il fonctionne correctement sur ma machine
( processeur AMD64, Ubuntu 9.10 ) :

$ gcc -o fork01 fork01.c
$ ./fork01
Fils numero 1:PID 8927
Je suis le processus 8927 et mon pere est 8926
Je suis le processus 8928 et mon pere est 8926
Fils numero 2:PID 8928
Fils numero 3:PID 8929
Je suis le processus 8929 et mon pere est 8926
Je suis le processus 8930 et mon pere est 8926
Fils numero 4:PID 8930
Fils numero 5:PID 8931
Je suis le processus 8931 et mon pere est 8926
$

Salutations,

Cornalin

La seule chose que j'ai du ajouter à ton code :

#include <unistd.h>
#include <stdio.h>

sinon il n'aurait pas compilé ...

Qu'est ce que tu utilises ? machine, OS, compilateur ?
0
Yoan Messages postés 11905 Statut Modérateur 2 332
 
Pense à attendre la mort des fils pour ne pas en fait des zombies !
Utilise wait ou waitpid ... qui sera exécutée par le père uniquement ... mais une fois pour chaque fils

Le truc rigolo c'est que les fils ne refont pas des fork(). J'aurais pensé que chacun des fils aurait poursuivi la boucle jusqu'à la fin ... et donc que quelque chose comme 5! processus soit créés :)
0
Spaki Messages postés 45 Statut Membre 2
 
Merci pour les réponses,

a Cornalin,
J'ai compilé et exécuté le programme à l'école avec gcc. J'avais bien sur rajouter au programme:
#include<stdio.h>
#include<unistd.h>.
Mais lorsque j'éxécutais , sa affichais core dumped. Peut etre il s'agit d'un problème avec le pc de l'école.
Mais , j'ai une question pourquoi les 5 affiches de la boucle while ne s'effectuent pas successivement???
i.e Fils numero 1,...Fils numero 2,...etc..

a Yoan,
Le wait est a utiliser pour les autres questions.
Dans ce programme , je pense pas qu'il faut faire avec wait.
Cependant, si j'ajoute un sleep d'une seconde avant l'affichage du fils, qu'est ce qu'il se passe.
0
Yoan Messages postés 11905 Statut Modérateur 2 332
 
Le wait est a utiliser pour les autres questions.
Ben ils deviennent zombie alors. D'ailleurs si on reproduit l'exécution plusieurs fois on voit parfois lorsque le père s'est terminé sans attendre la terminaison de ses fils, ils sont adoptés par init de PID 1.

"L'ordre" des processus n'est pas nécessairement respecté car il ne faut pas oublier que l'unique processeur de ta machine (ou dans le pire des cas les quatre coeurs de ton quad core ...) n'est pas capable de faire tourner plusieurs dizaines de processus en même temps. Il y a donc un programme (l'ordonnanceur) qui est chargé de déterminer quel processus peut s'accaparer le processeur à chaque instant. Donc l'ordre d'exécution de chaque processus tu ne le maitrises pas, c'est un savant calcul fait à partir de la priorité, des ressources utilisées, de la stratégie d'ordonnancement mise en place....

Enfin là dans la plupart des cas ça s'exécute "dans l'ordre". Un hasard. Mais ça serait beaucoup plus parlant avec des threads qui font chacun des trucs différents et qui "vivent" plus longtemps.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Yoan Messages postés 11905 Statut Modérateur 2 332
 
Oui, c'est le père qui fait un "wait" de ses fils
0