Signaux
100%

Processus · Leçon 6

Signaux

Découvrez comment Linux produit, bloque, délivre et traite les signaux pour contrôler les processus et notifier des événements.

Un signal est une notification asynchrone délivrée à un processus ou à un thread particulier. Les signaux signalent des événements et demandent des actions, mais ne transportent que peu d’informations par rapport aux mécanismes de communication interprocessus orientés données.

Origine des signaux

Les signaux peuvent provenir de plusieurs sources :

  • un terminal peut produire SIGINT pour Ctrl-C ou SIGTSTP pour Ctrl-Z et l’adresser au groupe de processus au premier plan ;
  • le noyau peut produire un signal synchrone tel que SIGSEGV lorsqu’un thread effectue une référence mémoire invalide ;
  • un processus peut envoyer un signal autorisé à un autre processus ou groupe de processus ;
  • les minuteurs, les changements d’état des enfants et les raccrochages des terminaux peuvent produire d’autres signaux.

L’émetteur doit posséder les permissions appropriées, généralement fondées sur les identifiants ou les capacités. Les signaux sont donc une interface de contrôle médiée par le noyau, et non des messages sans restriction entre utilisateurs arbitraires.

Quel signal un terminal produit-il normalement pour Ctrl-C ?

Dispositions et actions par défaut

La plupart des signaux possèdent une disposition à l’échelle du processus qui choisit l’une de trois réponses :

  • effectuer l’action par défaut définie pour le signal ;
  • ignorer le signal ;
  • appeler un gestionnaire installé par l’utilisateur.

Les actions par défaut diffèrent : un signal peut terminer, terminer et créer un fichier core, arrêter, reprendre ou être ignoré. L’interception de SIGTERM peut permettre à un programme de commencer un arrêt ordonné, mais le gestionnaire doit respecter des règles strictes de sûreté asynchrone et le programme peut encore retarder ou refuser de se terminer.

Les noms de signaux sont plus portables et lisibles que leurs numéros. Même si les architectures Linux courantes emploient le numéro 15 pour SIGTERM, ne supposez pas que tous les numéros, hormis ceux garantis par la norme concernée, soient identiques partout. Employez kill -l pour examiner l’association locale.

Pourquoi un processus peut-il répondre proprement à SIGTERM ?

Signaux bloqués et en attente

Les threads possèdent des masques de signaux capables de bloquer temporairement la délivrance de certains signaux. Un signal bloqué qui a été produit reste en attente jusqu’à ce qu’il puisse être délivré, sous réserve des règles propres aux signaux standards et temps réel. Plusieurs signaux standards du même type peuvent fusionner plutôt que d’être mis en file une fois par occurrence.

Dans un processus multithread, un signal adressé au processus peut être délivré à un thread admissible qui ne le bloque pas ; un signal adressé à un thread vise celui qui est désigné. Une conception correcte des signaux exige donc davantage que de vérifier si « le processus l’a bloqué ».

Que se passe-t-il normalement lorsqu’un signal pouvant être bloqué est produit tandis que sa cible le bloque ?

Signaux qui ne peuvent pas être traités

SIGKILL termine un processus et SIGSTOP l’arrête. Aucun des deux ne peut être intercepté, ignoré ou bloqué. Cela garantit au noyau le contrôle ultime, mais signifie aussi que SIGKILL ne laisse aucune possibilité de nettoyage à l’application.

Même SIGKILL peut ne pas faire disparaître immédiatement une tâche du point de vue d’un observateur. Une tâche peut attendre dans une opération non interruptible du noyau, puis son parent doit encore récupérer son état après sa terminaison.

Quelle paire ne peut être ni interceptée, ni ignorée, ni bloquée ?

Leçon terminée

Vous avez terminé Signaux

Vous savez maintenant expliquer les grandes étapes et les contraintes du traitement des signaux Linux.

  • Identifier les signaux produits par le terminal, le noyau et les processus.

  • Distinguer les actions par défaut, les signaux ignorés et les gestionnaires.

  • Relier le blocage à la délivrance en attente et aux masques des threads.

  • Se souvenir que SIGKILL et SIGSTOP ne peuvent pas être traités ni bloqués.

Conservez votre progression

Créez un compte gratuit pour enregistrer cette leçon et continuer sur n'importe quel appareil.

Créer un compte gratuit
Leçon Suivante
Retour à Processus