Bonjour,
J'ai un petit problème dans le code ci-dessous (le but de ce programme est que le proces père attende la fin de chacun des process fils qu'il créer).
Le problème, c'est qu'il ne les attend pas. Voici le résultat que j'obtiens :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 int main() { int pidFils1; /* Valeur de retour de la fonction fork */ int pidFils2; /* Valeur de retour de la fonction fork (2eme utilisation)*/ int pidPere; /* PID du processus parent */ /* SI erreur de creation d'un processus */ if((pidFils1 = fork()) == -1) { perror("Erreur de creation du processus 1"); exit(0); } /* Processus fils 1 */ if(pidFils1 == 0) { printf("Processus Fils 1\n"); printf("PID : %d\nPPID : %d\n", getpid(), getppid()); sleep(3); /* Pause de 3 secondes */ printf("Fin du process Fils 1\n"); } else {/* Processus pere */ /* SI erreur de creation */ if((pidFils2 = fork()) == -1) { perror("Erreur de creation du processus 2"); exit(0); } /* Processus fils 2 */ if(pidFils2 == 0) { printf("Processus Fils 2\n"); printf("PID : %d\nPPID : %d\n", getpid(), getppid()); sleep(5); /* Pause de 5 secondes */ printf("Fin du process Fils 2\n"); } else { printf("Pere en attente du fils 1...\n"); waitpid(pidFils1); printf("Pere en attente du fils 2...\n"); waitpid(pidFils2); printf("Processus Pere\n"); printf("PID : %d\nPID-Fils1 : %d\nPID-Fils2 : %d\n", getpid(), pidFils1, pidFils2); } } return 0; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 ./fork Processus Fils 1 PID : 4184 PPID : 4183 Processus Fils 2 PID : 4185 PPID : 4183 Pere en attente du fils 1... Pere en attente du fils 2... Processus Pere PID : 4183 PID-Fils1 : 4184 PID-Fils2 : 4185 [nicolas@localhost Desktop]$ Fin du process Fils 1 Fin du process Fils 2
Partager