diff --git a/TP4/.nfs00000000023a0b5b0000001f b/TP4/.nfs00000000023a0b5b0000001f new file mode 100755 index 0000000..2171e5c Binary files /dev/null and b/TP4/.nfs00000000023a0b5b0000001f differ diff --git a/TP4/.nfs00000000023a1c8700000008 b/TP4/.nfs00000000023a1c8700000008 new file mode 100755 index 0000000..dff1871 Binary files /dev/null and b/TP4/.nfs00000000023a1c8700000008 differ diff --git a/TP4/.nfs00000000023a1cc900000020 b/TP4/.nfs00000000023a1cc900000020 new file mode 100755 index 0000000..712568e Binary files /dev/null and b/TP4/.nfs00000000023a1cc900000020 differ diff --git a/TP4/.nfs00000000023a2b8d00000009 b/TP4/.nfs00000000023a2b8d00000009 new file mode 100755 index 0000000..f2fe230 Binary files /dev/null and b/TP4/.nfs00000000023a2b8d00000009 differ diff --git a/TP4/a.out b/TP4/a.out new file mode 100755 index 0000000..2171e5c Binary files /dev/null and b/TP4/a.out differ diff --git a/TP4/ex1.c b/TP4/ex1.c new file mode 100644 index 0000000..6ea722d --- /dev/null +++ b/TP4/ex1.c @@ -0,0 +1,31 @@ +#include +#include +#include +#include +#include + +static void msg1(int sig); + +int main(int argc, char const *argv[]) { + pid_t fils; + + if(!(fils=fork())) { + signal(SIGQUIT, &msg1); + signal(SIGINT, &msg1); + pause(); + pause(); + pause(); + } else { + sleep(1); + kill(fils, SIGQUIT); + kill(fils, SIGINT); + sleep(1); + kill(fils, SIGKILL); + } + + return EXIT_SUCCESS; +} + +void msg1(int sig) { + printf("JE TRAITE PAS\n"); +} \ No newline at end of file diff --git a/TP4/ex2.c b/TP4/ex2.c new file mode 100644 index 0000000..8f47247 --- /dev/null +++ b/TP4/ex2.c @@ -0,0 +1,62 @@ +#include +#include +#include +#include +#include + +static void work_finished(int sig); + + +static void save(int sig); + + +static void save_confirm(int sig); + +pid_t fils; + +int main(int argc, char const *argv[]) { + int mode = 'a'; // ou 'b' si a alors le fils n'a pas le temps de terminer + // si non a alors le fils termine son travail + + if(!(fils=fork())) { // Fils + signal(SIGUSR2, &save); + printf("Travail en cours"); + sleep(5); + if (mode != 'a') { + kill(getppid(), SIGQUIT); // Dire au père que le travail est terminé + } + + pause();// En attente d'une réponse (après l'envoi de la fin du travail) + pause();// En attente d'une réponse (après l'envoi de la confirmation de sauvegarde) + } else { // Père + signal(SIGQUIT, &work_finished); + signal(SIGINT, &save_confirm); + if (mode == 'a') { + sleep(2); + printf("Dire au fils de sauvegarder") + } else { + pause(); // En attente de la fin du travail du fils + } + pause(); // En attente de la fin de la sauvegarde du fils + } + + return EXIT_SUCCESS; +} + +void work_finished(int sig) { // SIGQUIT + printf("Le travail est terminé\n"); + kill(fils, SIGUSR2); // Dire au fils de sauvegarder +} + +void save(int sig) { // SIGUSR2 + printf("Sauvegarde des données en cours...\n"); + sleep(1); + kill(getppid(), SIGINT); // Dire au père que la sauvegarde est terminée + +} + +void save_confirm(int sig) { // SIGINT + printf("Sauvegarde terminée\n"); + sleep(.5); + kill(fils, SIGKILL); // Kill du fils +} \ No newline at end of file diff --git a/TP4/ex3.c b/TP4/ex3.c new file mode 100644 index 0000000..cd008ec --- /dev/null +++ b/TP4/ex3.c @@ -0,0 +1,24 @@ +#include +#include +#include +#include +#include + +static void babouche() { + printf("Je recois le signal 5/5"); +} + +int main(int argc, char const *argv[]) { + pid_t pid; + signal(SIGUSR2, &babouche); + if (pid=fork()) { // PERE + kill(pid, SIGUSR2); + } else { // FILS + pause(); + } + return EXIT_SUCCESS; +} + +// La réponse a la question : +// "Est ce que le handler de signaux d'un processus est hérité par son fils?" +// Est non. \ No newline at end of file