ajout fichiers tp4
This commit is contained in:
parent
1cb87a23e7
commit
3f357d6c5b
BIN
TP4/.nfs00000000023a0b5b0000001f
Executable file
BIN
TP4/.nfs00000000023a0b5b0000001f
Executable file
Binary file not shown.
BIN
TP4/.nfs00000000023a1c8700000008
Executable file
BIN
TP4/.nfs00000000023a1c8700000008
Executable file
Binary file not shown.
BIN
TP4/.nfs00000000023a1cc900000020
Executable file
BIN
TP4/.nfs00000000023a1cc900000020
Executable file
Binary file not shown.
BIN
TP4/.nfs00000000023a2b8d00000009
Executable file
BIN
TP4/.nfs00000000023a2b8d00000009
Executable file
Binary file not shown.
31
TP4/ex1.c
Normal file
31
TP4/ex1.c
Normal 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
TP4/ex2.c
Normal file
62
TP4/ex2.c
Normal 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
TP4/ex3.c
Normal file
24
TP4/ex3.c
Normal 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.
|
Loading…
Reference in New Issue
Block a user