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
|
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
void error (char *msg) {
fprintf(stderr,"%s",msg);
exit(-1);
}
void gereUSR1 ( int signo )
{printf("le pere %d redémarre",getpid());
}
void bodyFils()
{
printf("je suis %d pendant 10s et j'envoie un signal a mon pere",getpid());
sleep (5);
kill(getppid(),SIGUSR1);
}
void bodyPere()
{
printf("j'attend un signal de mon fils");
pause();
printf("je suis %d j'ai recu un signal de mon fils",getpid());
exit(0);
}
int main(void)
{
signal (SIGUSR1,gereUSR1);
switch(fork()) {
case -1 :
error("Erreur de création du fork\n");
break;
case 0 : // Je suis le fils
bodyFils();
exit(0);
break;
}
/* Je suis forcemment le père */
bodyPere();
while (wait(0) != -1);
} |