ajout fichiers tp4

This commit is contained in:
lecorre
2021-10-15 14:46:20 +02:00
parent 1cb87a23e7
commit 3f357d6c5b
8 changed files with 117 additions and 0 deletions
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
Executable
BIN
View File
Binary file not shown.
+31
View File
@@ -0,0 +1,31 @@
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
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");
}
+62
View File
@@ -0,0 +1,62 @@
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
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
}
+24
View File
@@ -0,0 +1,24 @@
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
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.