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).

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;
}
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
./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