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.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. 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 4242 ne 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.