Cours 6 : Signaux
Signaux
Signal : envoyé avec la commande kill
NB : les signaux sont très primitifs ⟶ on ne peut pas transmettre de données avec.
kill -l:-
liste tous les signaux possibles qu’on peut envoyer (la plupart tuent le processus qui les reçoit, on différencie juste les raisons).
Exs :
2 : SIGINT: l’effet de Ctrl+C (“INTerrupt”)4 : SIGILL: processus tué (par le noyau) car il a tenté quelque chose d’illégal-
15 : SIGTERM: avant d’éteindre l’ordinateur ⟶ pour dire “attention :9 : SIGKILLimminent !”- ex : pour envoyer une alerte pour sauvegarder son fichier, avant de quitter l’éditeur
SIGALARM: utilisé parsleep,alarm, …SIG_CORE: on termine, puis on crée un fichiercoreoù est consigné l’état du processus.9 : SIGKILL: mort immédiate : ne peut pas être rattrapé, par aucun processus (c’est l’Avada Kedavra des signaux).
alarm(nb_sec):-
signal
SIGALARMenvoyé au bout denb_secsecondes, puis : comportement par défaut = “terminer”.
Ex d’utilisation : kill -9 programme OU kill -KILL programme (programme peut être remplacé par son PID).
kill : signaux ne peuvent pas être envoyés à un autre utilisateur, sauf si on est root (tu veux fermer tous les programmes du tondu d’à côté ? Nah ! Interdit, à part si t’es le Chérif).
signal(SIGALARM, function):-
appelle la fonction
functiondès que le signalSIGNALARMest détecté.
signal(SIGKILL, SIG_IGN) OU signal(SIGTERM, SIG_IGN) OU signal(SIGINT, SIG_IGN) : pour ignorer les signaux émis, MAIS :
signal(SIGKILL, SIG_IGN) ; ne marchera pas : impossible d’ignorer un SIGKILL.
NB :
- c’est pareil que :
void handler (){}
signal(SIGINT, handler)
sleep: n’attend pas si un signal d’arrêt a été envoyé.
sigaction : comme signal (qui est déprécié), mais plus compliqué à utiliser.
SIGCHILD : envoyé par le fils. Peut être utilisé, au lieu de faire un wait depuis le père.
Ctrl+S / Ctrl + U : arrêter la sortie / la reprendre.
- Fonction réentrante :
-
plusieurs instances peuvent l’invoquer parallèlement.
Attention : ne pas appeler de fonction qui n’est pas réentrante (comme
malloc) dans unhandler⟶ on ne sait pas quand on va recevoir le signal (si ça arrive pendant que le
mallocdu programme principal s’exécute, c’est la cata !)
- PGID :
-
process group identifier : ID du groupe auquel appartient le processus.
NB : quand on tape Ctrl+C : le terminal envoie le signal au groupe de processus actif
⟶ tous les membres du groupe sont tués.
setpgid(processus, pgid):-
on affecte l’id
pgidà un groupe, auquel on affecte le processusprocessus. killall programme:-
tue le processus de nom
programme. fg programme/bg programme:-
on passer le processus
programmeau premier plan (foreground) / arrière plan (background).
Leave a comment