GNU/Linux >> Tutoriels Linux >  >> Linux

Mise en file d'attente des signaux en C

Si plusieurs signaux du même type sont envoyés et non traités, ils ne sont pas mis en file d'attente. Dites les masques de programme SIGUSR1 , appelle kill(getpid(), SIGUSR1) 10 fois et démasque SIGUSR1 . Il recevra SIGUSR1 juste une fois.


Voici ce qui se passe :

  1. Premier signal reçu, à savoir SIGUSR1, le gestionnaire est appelé et est en cours d'exécution
  2. Deuxième signal reçu, puisque le gestionnaire de nr1 est toujours en cours d'exécution, le signal nr2 est en attente et bloqué.
  3. Troisième signal reçu, puisque le gestionnaire de nr1 est toujours en cours d'exécution, le signal 3 est ignoré.
  4. Les quatrième, cinquième...etc signaux du même type que le signal nr1 sont rejetés.

Une fois que le gestionnaire de signal a terminé avec le signal nr1, il traitera le signal nr2, puis le gestionnaire de signal traitera le SIGUSR2.

Fondamentalement, les signaux en attente du même type ne sont pas mis en file d'attente, mais rejetés. Et non, il n'y a pas de moyen facile d'envoyer des signaux "en rafale" de cette façon. On suppose toujours qu'il peut y avoir plusieurs signaux qui sont rejetés, et on essaie de laisser le gestionnaire faire le travail de nettoyage et de trouver quoi faire (comme récolter des enfants, si tous les enfants meurent en même temps).


Linux
  1. 5 exemples d'instructions Bash Case

  2. Python - Piège tous les signaux

  3. Comment écrire un gestionnaire de signal pour attraper SIGSEGV ?

  4. Tracer les origines des signaux UNIX ?

  5. Identification du nom du signal reçu dans Bash

Comment installer l'application Signal Messaging sur Ubuntu 20.04

Force du signal Bluetooth LE Linux

signalfd() manque des signaux

Système de file d'attente Linux

Qu'est-ce qu'un processus arrêté sous Linux ?

Le signal peut-il être ignoré (perdu) ?