Les signaux
Objectif:
Envoyer un signal à un processus pour lui faire exécuter en
réponse une procédure préétablie.
Signaux: Repérés par un numéro et
un nom symbolique (décrit dans signal.h)
et obtenu grace à la commande kill -l
(2 pour SIGINT, 15 pour SIGTERM, 30 pour SIGUSR1).
Envoi d'un signal si:
- Constatation d'une anomalie matérielle.
- Frappe d'une combinaison de touche (Ctrl-C pour SIGINT).
- Par un autre processus utilisant la commande kill -signum pid ou
la fonction c (appel système) kill(pid,
signal).
Exemples:
SIGINT=2: Signal d'interruption (Ctrl-C
par exemple); SIGKILL=9: Fin du processus
(non déroutable); SIGALARM=14: Signal
déclenché après un certain nombre de seconde (horloge);
SIGTERM=15: Fin du processus; SIGSTOP=19: Suspension du processus (non déroutable);
SIGTSTP=20: Suspension du processus (Ctrl-Z
par exemple); SIGUSR1=10: Signal utilisateur
1 (disponible pour les applications); SIGUSR2=12:
Signal utilisateur 2
Réponse à un signal: comportement
(par défaut ou défini par l'utilisateur (déroutement)).
Attention, il
y a asynchrosnisme entre l'envoi et la réception d'un signal (il
y a un délai entre l'envoi et la réception)
Autres comportements possibles:
dérouter le signal en indiquant par exemple une procédure
à exécuter ou en l'obligeant à ignorer le signal
(appel système signal(numsig, comportement))
exemples:
signal(SIGINT, SIG_IGN); le signal SIGINT sera ignoré
signal(SIGINT, quoifaire); la
procédure quoifaire sera exécutée à la réception
du signal SIGINT
signal(SIGINT, SIG_DFL); le signal
retrouve son action par défaut