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
| #include <signal.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <stdbool.h>
int main(void)
{
int status = 0, nb_processus = 0,nb_processusRecus=0;
int i;
pid_t pid, pidfils,pid_pere=0;
switch(pid = fork())
{
case (pid_t) -1:
printf("erreur");
break;
case (pid_t) 0 :
for(i=0;i<200;i++)
{
kill(getppid(), -SIGUSR1); //envois de 200 fois -SIGUSR1
nb_processus++;
}
printf("%d\n", nb_processus);
pidfils=getpid(); //pour récupérer le pid du fils
exit(0);
break;
default :
printf(" dans le père %d\n", getpid());
do
{
nb_processusRecus++;
}while(kill(pidfils,0) !=-1); //envois de 0 au fils pou s'assurer qu'il existe
printf("%d\n", nb_processusRecus);
exit(0);
break;
}
exit(0);
} |