SIGNAL(2)

NOM
signal - Gestionnaire ANSI C de signaux.

SYNOPSIS
#include <signal.h>

void (*signal(int signum, void (*handler)(int)))(int);

DESCRIPTION
L'appel systeme signal installe un nouveau gestionnaire pour le signal numero signum. Le gestionnaire de signal est handler qui peut etre soit une fonction specifique de l'utilisateur, soit l'une des constantes suivantes :

    SIG_IGN
        Ignorer le signal

    SIG_DFL
        Reprendre le comportement par defaut pour le signal

L'argument entier qui est passe au gestionnaire de signal est le numero du signal. Ceci permet d'utiliser un meme gestionnaire pour plusieurs signaux.

VALEUR RENVOYEE
signal renvoie la valeur precedente 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 systemes BSD, les signaux sous Linux reprennent leurs comportements par defaut apres leur premiere reception. Il est donc generalement necessaire de rearmer le gestionnaire (par un nouvel appel a signal au sein meme du gestionnaire. Neanmoins, si l'on inclut <bsd/signal.h> a la place de <signal.h> alors signal est redefini en tant que __bsd_signal et disposera alors de la semantique BSD. Les deux versions sont construites a partir de signaction(2).

Si le prototype en haut de cette page vous semble confus, decomposez-le ainsi

typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler); Comme specifie par POSIX, le comportement d'un processus est indefini apres la reception d'un signal SIGFPE, SIGILL, ou SIGSEGV qui n'a pas ete engendre par une fonction kill() ou raise(). La division entiere par zero a un resultat indefini, sur certaines architecture elle declenche un signal SIGFPE. Ignorer ce signal peut conduire a des boucles infinies.

CONFORMITE
ANSI C

VOIR AUSSI
kill(1), kill(2), killpg(2), pause(2), raise(3), sigaction(2), signal(7), sigsetops(3), sigvec(2)