TP-systeme-exploitation-cen.../TP2/exo1-3.c
2023-06-20 20:57:09 +02:00

50 lines
1.3 KiB
C

#include <stdio.h> /* entrées sorties */
#include <unistd.h> /* pimitives de base : fork, ...*/
#include <stdlib.h> /* exit */
#include <signal.h> /* traitement des signaux */
/* Traitant du signal */
void handler_sigint(int signal_num) {
printf("\nProcessus de pid %d : J'ai reçu le signal %d\n", getpid(),signal_num);
return;
}
void dormir(int nb_secondes) {
for (int i = 0; i < nb_secondes; i++) {
sleep(1);
}
}
int main() {
int retour;
int duree_sommeil = 60;
/* associer un traitant au signal USR2 */
signal(12, handler_sigint);
printf("\nPère, pid=%d.\n", getpid());
retour = fork();
/* Bonne pratique : tester systématiquement le retour des appels système */
if (retour < 0) { /* échec du fork */
printf("Erreur fork\n");
/* Convention : s'arrêter avec une valeur > 0 en cas d'erreur */
exit(1);
}
if (retour == 0) { // fils
printf("\nFils, pid=%d, ppid=%d.\n", getpid(), getppid());
dormir(duree_sommeil);
/* Important : terminer un processus par exit */
exit(EXIT_SUCCESS); /* Terminaison normale (0 = sans erreur) */
}
else { // père
printf("\nPère (%d), mon fils=%d.\n", getpid(), retour);
}
dormir(duree_sommeil+2);
return EXIT_SUCCESS;
}