Bloquer des signaux

Problème

Vous souhaitez bloquer des signaux pour les traiter plus tard.

Solution

Créez un masque de signaux avec sigemptyset(), sigfillset()sigaddset() et sigdelset(), puis appelez sigprocmask().

Discussion

La création d’un masque de signaux commence par l’initialisation de ce masque avec sigemptyset() ou sigfillset() suivant que nous voulons partir d’un jeu de signaux vide ou plein. Puis pour chaque signal que nous voulons respectivement ajouter ou supprimer du masque, nous appelons sigaddset() ou sigdelset(). Voici quelques exemples :


sigset_t masque; 
 
/* Création d'un masque ne contenant que les signaux INT et TERM */ 
sigemptyset (&masque); 
setaddset (&masque, SIGINT); 
setaddset (&masque, SIGTERM); 
 
/* Création d'un masque contenant tous les signaux sauf FPE et BUS */ 
sigfillset (&masque); 
setdelset (&masque, SIGFPE); 
setdelset (&masque, SIGBUS);
 

Lorsque le masque de signaux est créé, nous appelons sigprocmask() avec en premier argument une des constantes suivantes : SIG_SETMASK pour remplacer l’ancien masque ; SIG_BLOCK pour ajouter les signaux du masque à ceux déjà bloqués (le résultat est l’union du masque en place et de celui que nous venons de créer) ; SIG_UNBLOCK pour supprimer les signaux du masque de ceux déjà bloqués (le résultat est la différence entre le masque en place et celui...

Pour consulter la suite, découvrez le livre suivant :
couv_EI3CACT.png
60-signet.svg
En version papier
20-ecran_lettre.svg
En version numérique
41-logo_abonnement.svg
En illimité avec l'abonnement ENI
130-boutique.svg
Sur la boutique officielle ENI
Précédent
Mettre en place un gestionnaire de signaux
Suivant
Connaître le masque de blocage des signaux