La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Signaux Il s'agit de messages asynchrones envoyés à un processus

Présentations similaires


Présentation au sujet: "Signaux Il s'agit de messages asynchrones envoyés à un processus"— Transcription de la présentation:

1 Signaux Il s'agit de messages asynchrones envoyés à un processus
soit par le système soit par d'autres processus La liste des signaux peut être obtenue par la commande "kill -l" : $ kill -l 1) SIGHUP ) SIGINT ) SIGQUIT ) SIGILL 5) SIGTRAP ) SIGABRT ) SIGBUS ) SIGFPE 9) SIGKILL ) SIGUSR ) SIGSEGV ) SIGUSR2 13) SIGPIPE ) SIGALRM ) SIGTERM ) SIGCHLD 18) SIGCONT ) SIGSTOP ) SIGTSTP ) SIGTTIN 22) SIGTTOU ) SIGURG ) SIGXCPU ) SIGXFSZ 26) SIGVTALRM 27) SIGPROF ) SIGWINCH 29) SIGIO 30) SIGPWR ) SIGSYS ) SIGRTMIN 33) SIGRTMIN+1 34) SIGRTMIN+2 35) SIGRTMIN+3 36) SIGRTMIN+4 37) SIGRTMIN+5 38) SIGRTMIN+6 39) SIGRTMIN+7 40) SIGRTMIN+8 41) SIGRTMIN+9 42) SIGRTMIN+10 43) SIGRTMIN+11 44) SIGRTMIN+12 45) SIGRTMIN+13 46) SIGRTMIN+14 47) SIGRTMIN+15 48) SIGRTMAX-15 49) SIGRTMAX-14 50) SIGRTMAX-13 51) SIGRTMAX-12 52) SIGRTMAX-11 53) SIGRTMAX-10 54) SIGRTMAX-9 55) SIGRTMAX-8 56) SIGRTMAX-7 57) SIGRTMAX-6 58) SIGRTMAX-5 59) SIGRTMAX-4 60) SIGRTMAX-3 61) SIGRTMAX-2 62) SIGRTMAX-1 63) SIGRTMAX signaux

2 traitement des signaux
lorsqu'un processus reçoit un signal, il exécute le traitant correspondant (traitant=handler) le comportement "par défaut" dépend du signal: soit ignoré soit terminaison du processus soit terminaison du processus avec création d'un fichier "image mémoire" (core) signaux

3 Les principaux signaux
SIGHUP | | A | Raccrochement (déconnexion) sur terminal de | | | contrôle, ou mort du processus de contrôle. SIGINT | | A | Interruption depuis le clavier (CTRL C) SIGQUIT | | A | Demande 'Quitter' depuis le clavier (CTRL \) SIGILL | | A | Instruction illégale. SIGABRT | | C | Signal d'arrêt depuis abort(3). SIGFPE | | C | Erreur mathématique virgule flottante. SIGKILL | | AEF | Signal 'KILL'. SIGSEGV | | C | Référence mémoire invalide. SIGALRM | | A | Temporisation alarm(2) écoulée. SIGTERM | | A | Signal de fin. SIGUSR1 | 30,10,16 | A | Signal utilisateur 1. SIGUSR2 | 31,12,17 | A | Signal utilisateur 2. SIGCHLD | 20,17,18 | B | Fils arrêté ou terminé. SIGCONT | 19,18,25 | | Continuer si arrêté (commandes bg ou fg) SIGSTOP | 17,19,23 | DEF | Arrêt du processus (CTRL z) A : mort du processus B : signal ignoré C : mort du processus + core D : arrêter le processus E : Le signal ne peut pas être intercepté. F : Le signal ne peut pas être ignoré. signaux

4 interface de programmation
L'appel système signal(SIG_NUM, handler) permet de modifier la gestion du signal SIG_NUM : handler peut être : SIG_IGN : le signal sera ignoré SIG_DFL : traitement par défaut l'adresse d'une fonction fournie par le programme : cette fonction sera appelée quand le signal sera reçu l'appel à signal() retourne l'adresse de la fonction de traitement courante, pour pouvoir la restaurer plus tard. signaux

5 Interface de programmation
l'appel système kill(PID, SIG_NUM) permet d'envoyer le signal SIG_NUM au processus de PID PID. La fonction raise(SIG_NUM) permet à un processus de s'envoyer le signal SIG_NUM. la fonction alarm(sec) demande au système d'envoyer un signal SIG_ALRM au processus appelant après sec secondes. Si sec = 0, toute alarme demandée précédemment est annulée la fonction pause() met le processus courant à l'état "endormi" en attente de signaux. Quand un signal est reçu, il est traité, puis l'exécution reprend en sortie de la fonction pause(). signaux

6 signaux : exemple 1 #include<stdio.h> #include<signal.h>
void hand() { printf("Envoyer le signal SIGKILL pour me tuer\n"); } main() printf("mon PID est %d\n",getpid()); signal(SIGINT,hand); signal(SIGQUIT,hand); for(;;); signaux

7 Résultat : exemple 1 [couveep@pegtst2 os]$ ./signal1 &
[1] mon PID est 12970 os]$ kill -SIGINT 12970 Envoyer le signal SIGKILL pour me tuer os]$ kill -SIGQUIT 12970 os]$ os]$ kill -SIGTERM 12970 [1]+ Terminated /signal1 signaux

8 signaux : exemple 2 programme de surveillance de la température interne du système, qui tourne en boucle infinie il doit pouvoir afficher sur demande la température courante, et la température maximale relevée depuis le lancement proposer une implémentation basée sur les signaux SIG_ALRM, SIG_USR1 et SIG_USR2, et l'utilisation de pause(). signaux

9 résultat [couveep@pegtst2 os]$ ./signal2 & [1] 664 mon PID est 664
temp = temp = temp = temp = kill -SIGUSR1 664 temperature courante : os]$ temp = kill -SIGUSR2 664 temperature maximale enregistree : os]$ temp = temp = kill -SIGTERM 664 [1]+ Terminated /signal2 signaux

10 Aspects Système Envoyer un signal à un processus revient à mettre une entrée à 1 dans un tableau (en pratique, un bit à 1 dans un mot sur 32 ou 64 bit) ce tableau se trouve dans la structure task_struct associée à chaque processus actif le système "traite" les signaux en attente lorsqu'il élit le processus (passage de actif -> élu) un processus endormi ne peut pas être élu… mais, quand un processus s'endort, il précise si il souhaite être réveillé sur reception d'un signal, ou pas. Dans ce dernier cas, il sera impossible de le "tuer", y compris avec la commande "kill -9" signaux


Télécharger ppt "Signaux Il s'agit de messages asynchrones envoyés à un processus"

Présentations similaires


Annonces Google