Les signaux Unix
Les signaux SIGHUP, SIGINT, SIGQUIT, SIGKILL, SIGSEGV, SIGTERM, SIGCHLD, SIGCONT, SIGSTOP et SIGTSTP : qui les envoie, ce qu'ils font par défaut, lesquels un programme peut capter, et les commandes kill, killall et pkill.
- 28 cartes
- 4 thèmes
- Gratuit
Le programme, thème par thème
Le poids de chaque thème suit celui que lui donne l'examen.
- Notions
- Questions
- Ranger et relier
- Mises en situation
Quelques cartes du deck
Signal : de quoi s'agit-il ?
Voir la réponse
Message très court, identifié par un numéro et un nom, qu'envoient le noyau ou un autre processus pour avertir ou interrompre un processus.
Le processus peut en général le capter et réagir à sa façon, l'ignorer ou subir l'action par défaut. Deux signaux échappent à cela : SIGKILL et SIGSTOP.
Que fait la commande
kill 4242?- Envoie SIGTERM au processus 4242, qui peut le capter
- Envoie SIGKILL au processus 4242 : arrêt immédiat, sans recours
- Envoie SIGINT au processus 4242, comme Ctrl+C dans son terminal
- Envoie SIGHUP au processus 4242 pour lui faire relire sa configuration
Voir la réponse
Envoie SIGTERM au processus 4242, qui peut le capter
Sans option, kill envoie SIGTERM (15). Le mot kill fait croire à un arrêt forcé, mais c'est une demande : le programme garde la main pour se terminer proprement.
… suspend un processus sans qu'il puisse s'y opposer, et … le fait repartir là où il s'était arrêté.
Voir la réponse
SIGSTOP suspend un processus sans qu'il puisse s'y opposer, et SIGCONT le fait repartir là où il s'était arrêté.
SIGTSTP, envoyé par Ctrl+Z, fait la même chose mais un programme peut le capter. SIGSTOP, lui, ne se capte pas, comme SIGKILL.
SIGTERM (15) : de quoi s'agit-il ?
Voir la réponse
Demande polie de s'arrêter : le programme peut la capter pour terminer ses écritures et fermer ses fichiers avant de partir.
C'est le signal envoyé par kill sans option. Les gestionnaires de services envoient d'abord celui-ci, puis SIGKILL si le processus ne part pas.
kill 4242ne semble rien faire et le service écrit encore dans sa base de données. Que faire ?- Le laisser finir, surveiller avec ps, et ne passer à SIGKILL qu'en dernier recours
- Envoyer tout de suite kill -9 : un service qui écrit encore a forcément ignoré SIGTERM
- Renvoyer kill 4242 plusieurs fois : chaque SIGTERM reçu accélère l'arrêt
- Considérer le processus comme un zombie, que kill -9 retire immédiatement
Voir la réponse
Le laisser finir, surveiller avec ps, et ne passer à SIGKILL qu'en dernier recours
SIGTERM a été reçu : le service termine ses écritures avant de s'arrêter, et c'est précisément ce qu'on veut lui laisser faire. SIGKILL risquerait de laisser la base dans un état incohérent.