Bonjour tout le monde:

Bon, je veux réalisé un petit programme C qui réalise les taches suivantes:
1)Le père crée N fils.
2)Chaque fils se termine de façon differente .
3)Le processus père restera en boucle sur wait jusq u' à ce qu'il ne reste plus de fils.

Le programme doit determiner la façon de terminer chaque fils, et doit egalement afficher les circanstances de terminaisons de chacun d'eux.


j'ai fait un petit essai juste pour N=2, et j'avoue que je ne metrise pas assez les notions, mais si vous m'orientez, je serai vraiment reconnaissante.
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
47
48
49
50
51
52
53
54
55
56
57
58
 
#include <stdio.h>
#include <unistd.h>
#include<stdlib.h>
#include <sys/wait.h>
 
int info;
pid_t res;
 
int main(void)
{
	void affichage_type_terminaison(pid_t pid,int status);
	int processus_fils(int numero);
	pid_t pid;
	int i;
	int status_loc;
	for(i=0;i<2;i++)
	{
		pid=fork();
		if(pid==0)
		{
			printf("\n\nje suis fils de pid: %d mon pere est %d\n ",getpid(),getppid());
			break;
		}
	}
 
				processus_fils(i);
				affichage_type_terminaison(getpid(),status_loc);
				if((wait(&status_loc))!=getpid())
				printf("\nje me reveille\n");
 
return(EXIT_SUCCESS);
 
}
 
void affichage_type_terminaison(pid_t pid,int status_loc) 
{
 
		if(wait(&status_loc)==-1) printf("aucun fils a attendre\n");
		else {if(WIFEXITED(info))
 
			printf("\nmon pid est: %d et j'ai renvoye la valeur: %d\n",pid, WEXITSTATUS(info));
 
		else
 
			printf("Mon fils s'est arreté a cause d'un signal \n");
}
}
 
int processus_fils(int numero) {
switch(numero) {
case(0):return(0);
case(1):printf("je suis le fils, mon pid est: %d, et celui de mon pere est: %d \n",getpid(),getppid());
sleep(5);
 
			exit(2);
}
}