Bonjour,

je dois écrire un programme C qui crée un processus fils. Le processus père doit être le premier à imprimer un message à l'écran, ensuite le processus fils doit imprimer un message à l'écran, ensuite le père, ensuite le fils, et ainsi de suite... Pour ce faire, je dois utiliser des signaux et je n'ai le droit d'utiliser qu'un seul handler.

Voici le code que j'ai écrit:
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
 
 
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>
#include <errno.h>
 
 
#define SignalDuPere SIGUSR1
#define SignalDuFils SIGUSR2
 
pid_t filsID;
 
void handler(int sig)
	{
	switch (sig)
		{
		case(SignalDuPere): 	fprintf(stderr,"%ld\n",sig);
		kill(filsID,SignalDuFils);			
		case(SignalDuFils): 	fprintf(stderr,"%ld\n",sig);
		kill(getppid(),SignalDuPere);
		}
	}
 
int main(int argc,char *argv[])
	{
	extern int pid;
 
	switch(filsID=fork())
		{
		case (-1):
			fprintf(stderr, "Erreur sur fork: %s\n",errno); 
			exit(errno);
 
		case(0):
			signal(SignalDuFils, handler);
			while(1) pause();
 
		default:
			signal(SignalDuPere, handler);
			kill(getpid(), SignalDuPere);
			while (1) pause();
		}
	return 0;
	}
Ce code compile sans problème, mais lorsque je lance le programme dans le shell, oh surprise, la fenêtre du shell se ferme ! (Gros plantage quoi !!!).

Un génie des processus peut-il éclairer ma lampe ?

Merci!