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 :
- Premier signal reçu, à savoir SIGUSR1, le gestionnaire est appelé et est en cours d'exécution
- 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é.
- Troisième signal reçu, puisque le gestionnaire de nr1 est toujours en cours d'exécution, le signal 3 est ignoré.
- 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).