2020-05-02 00:01:44 +02:00

60 lines
1.9 KiB
C
Executable File
Raw Blame History

/**********************************************************/
/* DUT INFORMATIQUE - M311 - R. CHIGNOLI */
/* p_fork_signal : Apr<70>s fork, */
/* - PERE : Affiche son pid et ppid, */
/* Ignore le signal SIGINT et le montre */
/* S'arrete <20> la reception du signal SIGUSR1, */
/* se met en boucle infinie. */
/* - FILS : Affiche son pid et son ppid, */
/* Envoie trois signaux SIGINT au pere, */
/* Attend un signal SIGTERM de l'utilisateur */
/* Se met en boucle infinie. */
/* Envoie le signal SIGUSR1 a son pere a */
/* l'interception du signal SIGTERM puis */
/* meurt. */
/**********************************************************/
# include <stdio.h>
# include <stdlib.h>
# include <signal.h>
# include <unistd.h>
void repSIGINT() {
printf ("\nJ'ignore le signal SIGINT (<Ctrl + \\C>)\n");
}
int main () {
int res;
res = fork();
if (res < 0){
printf ("ERREUR FORK\n");
}
else {
if (res == 0)
{ /************************** FILS ***********************/
printf("Je suis le fils : ");
printf("pid : %d\n", getpid());
printf("ppid : %d\n",getppid());
for (int i = 0; i < 5; i++)
{
kill(getppid(), SIGINT);
sleep(1);
}
}
else
{ /************************** PERE ***********************/
printf("Je suis le père : ");
printf("pid : %d\n", getpid());
printf("ppid : %d\n",getppid());
signal(SIGINT, repSIGINT);
}
}
for(;;);
return 0;
}