Man page - signal(2)

Packages contains this manual

Available languages:

en fr pl nl cs ja ru ro de

Manual

signal

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
VERSIONS
Portabilité
STANDARDS
HISTORIQUE
NOTES
VOIR AUSSI
TRADUCTION

NOM

signal - Gestion de signaux ANSI C

BIBLIOTHÈQUE

BibliothĂšque C standard ( libc , -lc )

SYNOPSIS

#include <signal.h>

typedef void (*sighandler_t)(int);

sighandler_t signal(int signum , sighandler_t handler );

DESCRIPTION

AVERTISSEMENT : Le comportement de signal () varie selon les versions d’UNIX, et a aussi variĂ© au cours du temps dans les diffĂ©rentes versions de Linux. Évitez de l’utiliser : utilisez plutĂŽt sigaction (2). Consultez la section PortabilitĂ© plus bas.

signal () installe le gestionnaire handler pour le signal signum . handler peut ĂȘtre SIG_IGN , SIG_DFL ou l’adresse d’une fonction dĂ©finie par le programmeur (un « gestionnaire de signal »).

Lors de l’arrivĂ©e d’un signal correspondant au numĂ©ro signum , l’un des Ă©vĂ©nements suivants se produit :

*

Si le gestionnaire vaut SIG_IGN , le signal est ignoré.

*

Si le gestionnaire est SIG_DFL , l’action par dĂ©faut associĂ©e Ă  ce signal est entreprise (consultez signal (7)).

*

Si le gestionnaire est une fonction, alors tout d’abord le gestionnaire est reconfigurĂ© Ă  SIG_DFL , ou le signal est bloquĂ© (voir la section PortabilitĂ© ci-dessous), puis handler est appelĂ©e avec l’argument signum . Si l’invocation du gestionnaire a bloquĂ© le signal, le signal est dĂ©bloquĂ© au retour du gestionnaire.

Les signaux SIGKILL et SIGSTOP ne peuvent ĂȘtre ni ignorĂ©s, ni interceptĂ©s.

VALEUR RENVOYÉE

signal () renvoie la valeur prĂ©cĂ©dente du gestionnaire de signaux. En cas d’erreur, il renvoie SIG_ERR s et errno est positionnĂ© pour indiquer l’erreur.

ERREURS

EINVAL

signum est invalide.

VERSIONS

L’utilisation du type sighandler_t est une extension GNU, exposĂ©e si _GNU_SOURCE est dĂ©finie. La glibc dĂ©finit aussi sig_t (dĂ©rivĂ© de BSD) si _BSD_SOURCE (dans la glibc 2.19 ou les prĂ©cĂ©dentes) ou _DEFAULT_SOURCE (dans la glibc 2.19 et les suivantes) est dĂ©finie. Sans cette dĂ©finition de ce type, la dĂ©claration de signal () est un peu plus difficile Ă  lire :

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

Portabilité

La seule utilisation portable de signal () est de de configurer le gestionnaire du signal Ă  SIG_DFL ou SIG_IGN . La sĂ©mantique associĂ©e Ă  l’utilisation de signal () pour dĂ©finir un gestionnaire de signal dĂ©pend suivant les systĂšmes (et POSIX.1 autorise explicitement ces Ă©carts) ; ne l’utiliser pas pour cela.

POSIX.1 a résolu ce problÚme de portabilité est spécifiant sigaction (2), qui fournit un contrÎle explicite de la sémantique quand un gestionnaire de signal est appelé ; utilisez cette interface plutÎt que signal ().

STANDARDS

C11, POSIX.1-2008.

HISTORIQUE

C89, POSIX.1-2001.

Dans les systĂšmes UNIX d’origine, quand un gestionnaire dĂ©fini par signal () Ă©tait appelĂ© lors de la distribution d’un signal, le gestionnaire du signal Ă©tait remis Ă  SIG_DFL , et le systĂšme ne bloquait pas la distribution des instances suivantes du signal. Cela revenait Ă  appeler sigaction (2) avec les attribut suivants :

sa.sa_flags = SA_RESETHAND | SA_NODEFER;

System V fournit Ă©galement cette sĂ©mantique pour signal (). Cela posait problĂšme parce qu’un signal pouvait ĂȘtre distribuĂ© avant que le gestionnaire ait le temps de se rĂ©activer. De plus, la distribution rapide d’un mĂȘme signal pouvait causer des appels rĂ©cursif au gestionnaire.

BSD a amĂ©liorĂ© la situation, mais a malheureusement Ă©galement modifiĂ© la sĂ©mantique de l’interface de signal () en procĂ©dant de cette façon. Sous BSD, lorsqu’un gestionnaire de signal est appelĂ©, la disposition du signal n’est pas rĂ©initialisĂ©e, et les instances suivantes du signal ne peuvent ĂȘtre distribuĂ©es tant que le gestionnaire s’exĂ©cute. En outre, certains appels systĂšme bloquants sont automatiquement relancĂ©s s’ils sont interrompus par le gestionnaire de signal (consultez signal (7)). La sĂ©mantique BSD est Ă©quivalente Ă  un appel de sigaction (2) avec les attributs suivants :

sa.sa_flags = SA_RESTART;

La situation sous Linux est la suivante :

-

L’appel systĂšme signal () du noyau fournit la sĂ©mantique System V.

-

Par dĂ©faut, dans la glibc 2 et les suivantes, la fonction de bibliothĂšque signal () n’appelle pas l’appel systĂšme du noyau. À la place, elle appelle sigaction (2) est fournissant un attribut qui fournit la sĂ©mantique BSD. Ce comportement par dĂ©faut est fourni tant que la macro de test de fonctionnalitĂ©s est dĂ©finie : _BSD_SOURCE dans la glibc 2.19 et les prĂ©cĂ©dentes ou _DEFAULT_SOURCE dans la glibc 2.19 et les suivantes (par dĂ©faut, ces macros sont dĂ©finies ; consultez feature_test_macros (7) pour des dĂ©tails). Si une telle macro de test de fonctionnalitĂ©s n’est pas dĂ©finie, signal () fournit la sĂ©mantique de System V.

NOTES

Les effets de signal () dans un processus multithreadé sont indéterminés.

Comme spĂ©cifiĂ© par POSIX, le comportement d’un processus est indĂ©fini aprĂšs la rĂ©ception d’un signal SIGFPE , SIGILL , ou SIGSEGV qui n’a pas Ă©tĂ© engendrĂ© par une fonction kill (2) ou raise (3). La division entiĂšre par zĂ©ro a un rĂ©sultat indĂ©fini, sur certaines architectures elle dĂ©clenche un signal SIGFPE . De mĂȘme, diviser l’entier le plus nĂ©gatif par -1 peut dĂ©clencher SIGFPE .

Consultez sigaction (2) pour des détails sur ce qui se passe quand la posture de SIGCHLD est positionnée sur SIG_IGN .

Consultez signal-safety (7) pour une liste de fonctions sĂ»res pour les signaux asynchrones qui peuvent ĂȘtre appelĂ©es dans un gestionnaire de signaux.

VOIR AUSSI

kill (1), alarm (2), kill (2), pause (2), sigaction (2), signalfd (2), sigpending (2), sigprocmask (2), sigsuspend (2), bsd_signal (3), killpg (3), raise (3), siginterrupt (3), sigqueue (3), sigsetops (3), sigvec (3), sysv_signal (3), signal (7)

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org>, Cédric Boutillier <cedric.boutillier@gmail.com>, Frédéric Hantrais <fhantrais@gmail.com> et Jean-Philippe MENGUAL <jpmengual@debian.org>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .