SIGNAL(2) Manuel du programmeur Linux SIGNAL(2)
NOM
signal - Gestionnaire ANSI C de signaux.
SYNOPSIS
#include <signal.h>
void (*signal(int signum, void (*handler)(int)))(int);
DESCRIPTION
L'appel système signal installe un nouveau gestionnaire
pour le signal numéro signum. Le gestionnaire de signal
est handler qui peut être soit une fonction spécifique de
l'utilisateur, soit l'une des constantes suivantes :
SIG_IGN
Ignorer le signal
SIG_DFL
Reprendre le comportement par défaut pour le
signal
L'argument entier qui est passé au gestionnaire de signal
est le numéro du signal. Ceci permet d'utiliser un même
gestionnaire pour plusieurs signaux.
VALEUR RENVOYÉE
signal renvoie la valeur précédente du gestionnaire de
signaux, ou SIG_ERR en cas d'erreur.
NOTES
On ne peut fournir de gestionnaire de signaux ni pour
SIGKILL ni pour SIGSTOP.
Contrairement aux systèmes BSD, les signaux sous Linux
reprennent leurs comportements par défaut après leur
première réception. Il est donc généralement nécessaire de
réarmer le gestionnaire (par un nouvel appel à signal ) au
sein même du gestionnaire.
Néanmoins, si l'on inclut <bsd/signal.h> à la place de
<signal.h> alors signal est redéfini en tant que
__bsd_signal et disposera alors de la sémantique BSD. Les
deux versions sont construites à partir de signaction(2).
Si le prototype en haut de cette page vous semble confus,
décomposez-le ainsi
typedef void (*sighandler_t)(int);
Linux 9 Avril 1999 1
SIGNAL(2) Manuel du programmeur Linux SIGNAL(2)
sighandler_t signal(int signum, sighandler_t handler);
Comme spécifié par POSIX, le comportement d'un processus
est indéfini après la réception d'un signal SIGFPE, SIG
ILL, ou SIGSEGV qui n'a pas été engendré par une fonction
kill() ou raise().
La division entière par zéro a un résultat indéfini, sur
certaines architecture elle déclenche un signal SIGFPE.
Ignorer ce signal peut conduire à des boucles infinies.
(De même diviser l'entier le plus négatif par -1 peut
déclencher SIGFPE).
POSIX (B.3.3.1.3) désapprouve le positionnement de SIGCHLD
à SIG_IGN. Les comportements BSD et SYSV diffèrent,
faisant échouer sous Linux les logiciels BSD qui posi
tionne l'action de SIGCHK à SIG_IGN.
CONFORMITÉ
ANSI C
VOIR AUSSI
kill(1), kill(2), killpg(2), pause(2), raise(3), sigac
tion(2), signal(7), sigsetops(3), sigvec(2)
TRADUCTION
Christophe Blaess, 1997.
Linux 9 Avril 1999 2