Man page - signal(7)

Packages contains this manual

Available languages:

en fr it pl cs ja ru zh_TW zh_CN de

Manual

signal

NOM
DESCRIPTION
Action des signaux
Envoyer un signal
Attente de la capture d’un signal
Accepter un signal de façon synchrone
Masque de signaux et signaux en attente
Exécution des gestionnaires de signal
Signaux standard
SĂ©mantiques d’attente et de distribution pour les signaux standard
Numérotation pour les signaux standard
Signaux temps réel
Interruption d’appel et de fonction par un gestionnaire de signal
Interruption d’appel et de fonction par des signaux d’arrĂȘt
STANDARDS
NOTES
BOGUES
VOIR AUSSI
TRADUCTION

NOM

signal – Panorama des signaux

DESCRIPTION

Linux prend en charge à la fois les signaux POSIX classiques (« ci-aprÚs signaux standard ») et les signaux POSIX temps réel.

Action des signaux

Chaque signal a une action en vigueur qui dĂ©termine le comportement du processus lorsqu’il reçoit ce signal.

Les Ă©lĂ©ments de la colonne « Action » indiquent l’action par dĂ©faut pour chaque signal, avec la signification suivante :

Term

Par défaut, terminer le processus.

Ign

Par défaut, ignorer le signal.

Core

Par dĂ©faut, terminer le processus et crĂ©er un fichier d’image mĂ©moire (consultez core (5)).

Stop

Par dĂ©faut, arrĂȘter le processus.

Cont

Par dĂ©faut, continuer le processus s’il est actuellement arrĂȘtĂ©.

Un processus peut changer l’action d’un signal avec sigaction (2) ou signal (2) (la deuxiĂšme option est moins portable quand un gestionnaire de signal est dĂ©fini ; consultez signal (2) pour plus de dĂ©tails). Avec ces appels systĂšme, un processus peut choisir de se comporter de l’une des façons suivantes lorsqu’il reçoit un signal : effectuer l’action par dĂ©faut, ignorer le signal ou intercepter le signal avec un gestionnaire de signal , c’est-Ă -dire une fonction dĂ©finie par le programme qui est invoquĂ©e automatiquement lorsque le signal est transmis.

Par dĂ©faut, le gestionnaire de signal est appelĂ© sur la pile normale des processus. Il est possible de prĂ©voir que le gestionnaire de signal utilise une autre pile ; consultez sigaltstack (2) pour une discussion sur comment faire cela et quand cela pourrait ĂȘtre utile.

L’action d’un signal est un attribut du processus : dans une application multithreadĂ©e, l’action d’un signal particulier est la mĂȘme pour tous les threads.

Un enfant créé par fork (2) hĂ©rite d’une copie des actions des signaux de son parent. Lors d’un execve (2), les actions des signaux pris en charge sont remises aux valeurs par dĂ©faut ; les actions des signaux ignorĂ©s ne sont pas modifiĂ©es.

Envoyer un signal

Les appels systùme et les fonctions de bibliothùque qui suivent permettent à l’appelant d’envoyer un signal :
raise
(3)

Envoyer un signal au thread appelant.

kill (2)

Envoyer un signal au processus indiqué, à tous les membres du groupe de processus indiqué ou à tous les processus du systÚme.

pidfd_send_signal (2)

Envoyer un signal à un processus identifié par un descripteur de fichier de PID.

killpg (3)

Envoyer un signal à tous les membres du groupe de processus indiqué.

pthread_kill (3)

Envoyer un signal au thread POSIX indiquĂ© dans le mĂȘme processus que l’appelant.

tgkill (2)

Envoyer un signal au thread indiquĂ© Ă  l’intĂ©rieur d’un processus donnĂ© (c’est l’appel systĂšme utilisĂ© pour implĂ©menter pthread_kill (3)).

sigqueue (3)

Envoyer un signal temps réel, avec ses données jointes, au processus indiqué.

Attente de la capture d’un signal

Les appels systĂšme suivants suspendent l’exĂ©cution du thread appelant jusqu’à ce qu’un signal soit reçu (ou qu’un signal non pris en charge termine le processus) :
pause
(2)

Suspendre l’exĂ©cution jusqu’à ce que n’importe quel signal soit reçu.

sigsuspend (2)

Changer temporairement le masque de signaux (voir ci-dessous) et suspendre l’exĂ©cution jusqu’à ce qu’un des signaux non masquĂ© soit reçu.

Accepter un signal de façon synchrone

Au lieu d’intercepter un signal de façon asynchrone avec un gestionnaire de signal, il est possible de l’accepter de façon synchrone, c’est-Ă -dire de bloquer l’exĂ©cution jusqu’à ce que le signal soit distribuĂ©. À ce moment, le noyau renvoie des informations concernant le signal Ă  l’appelant. Il y a deux façons gĂ©nĂ©rales pour faire cela :

-

sigwaitinfo (2), sigtimedwait (2) et sigwait (3) suspendent l’exĂ©cution jusqu’à ce qu’un des signaux dans l’ensemble indiquĂ© soit distribuĂ©. Chacun de ces appels renvoie des informations concernant le signal distribuĂ©.

-

signalfd (2) renvoie un descripteur de fichier qui peut ĂȘtre utilisĂ© pour lire les informations concernant les signaux qui sont distribuĂ©s Ă  l’appelant. Chaque read (2) dans ce descripteur de fichier est bloquant jusqu’à ce que un des signaux de l’ensemble indiquĂ© dans l’appel signalfd (2) soit distribuĂ© Ă  l’appelant. Le tampon renvoyĂ© par read (2) contient une structure qui dĂ©crit le signal.

Masque de signaux et signaux en attente

Un signal peut ĂȘtre bloquĂ© , ce qui signifie qu’il ne sera pas envoyĂ© avant d’ĂȘtre dĂ©bloquĂ©. Entre le moment de sa crĂ©ation et celui de son envoi, le signal est dit en attente .

Chaque thread d’un processus a un masque de signaux indĂ©pendant qui indique l’ensemble des signaux bloquĂ©s par le thread. Un thread peut modifier son masque de signaux avec pthread_sigmask (3). Dans une application traditionnelle Ă  un seul thread, sigprocmask (2) peut ĂȘtre utilisĂ©e pour modifier le masque de signaux.

Un processus enfant créé avec fork (2) hĂ©rite d’une copie du masque de signaux de son parent. Le masque de signaux est conservĂ© au travers d’un execve (2).

Un signal peut ĂȘtre « orientĂ© processus » ou « orientĂ© thread ». Un signal orientĂ© processus est un signal qui cible (et par consĂ©quent en attente pour) le processus dans son entier. Il peut l’ĂȘtre parce qu’il a Ă©tĂ© gĂ©nĂ©rĂ© par le noyau pour des raisons autres qu’une exception matĂ©rielle ou parce qu’il a Ă©tĂ© envoyĂ© en utilisant kill (2) ou sigqueue (3). Un signal orientĂ© thread est destinĂ© Ă  un thread particulier. Un tel signal peut l’ĂȘtre parce qu’il a Ă©tĂ© gĂ©nĂ©rĂ© en consĂ©quence de l’exĂ©cution d’une instruction spĂ©cifique de code machine qui est dĂ©clenchĂ©e par une exception matĂ©rielle (par exemple, SIGSEGV pour un accĂšs mĂ©moire non autorisĂ© ou SIGFPE pour une erreur mathĂ©matique) ou parce qu’il visait un thread particulier en utilisant une interface telle que tgkill (2) ou pthread_kill (3).

Un signal orientĂ© processus peut ĂȘtre dĂ©livrĂ© Ă  n’importe quel des threads qui n’ont pas prĂ©sentement le signal bloquĂ©. Si plus d’un des threads a le signal non bloquĂ©, alors le noyau choisit un thread arbitraire auquel dĂ©livrer le signal.

Un thread peut obtenir l’ensemble des signaux actuellement en attente en utilisant sigpending (2). Cet ensemble est l’union de l’ensemble des signaux en attente orientĂ©s processus et l’ensemble des signaux en attente pour le thread appelant.

Un enfant créé avec fork (2) dĂ©bute avec un ensemble de signaux en attente vide. L’ensemble de signaux en attente est conservĂ© au travers d’un execve (2).

Exécution des gestionnaires de signal

À chaque transition d’une exĂ©cution en mode noyau vers une en mode utilisateur (par exemple, lors du retour d’un appel systĂšme ou l’ordonnancement d’un thread sur le CPU), le noyau vĂ©rifie s’il existe un signal en attente non bloquĂ© pour lequel le processus a Ă©tabli un gestionnaire de signal. Si un tel signal est en attente, les Ă©tapes suivantes se dĂ©roulent :

(1)

Le noyau rĂ©alise les Ă©tapes prĂ©paratoires nĂ©cessaires pour l’exĂ©cution du gestionnaire de signal :

(1.1)

Le signal est supprimĂ© de l’ensemble des signaux en attente.

(1.2)

Si le gestionnaire de signal a Ă©tĂ© installĂ© par un appel Ă  sigaction (2) qui est prĂ©cisĂ© par l’indicateur SA_ONSTACK et que le thread a dĂ©fini une pile de signaux de remplacement (en utilisant sigaltstack (2)), alors cette pile est installĂ©e.

(1.3)

Diverses piÚces du contexte relatif au signal sont enregistrées dans une structure spéciale qui est créée dans la pile. Les informations enregistrées comprennent :

-

le registre de compteur du programme (c’est-Ă -dire l’adresse de la prochaine instruction dans le programme principal qui devrait ĂȘtre exĂ©cutĂ©e lors du renvoi du gestionnaire de signal) ;

-

l’état du registre spĂ©cifique Ă  l’architecture nĂ©cessaire pour reprendre le programme interrompu ;

-

le masque de signaux du thread actuel ;

-

les paramĂštres de la pile de signaux de remplacement du thread.

If the signal handler was installed using the sigaction (2) SA_SIGINFO flag, then the above information is accessible via the ucontext_t object that is pointed to by the third argument of the signal handler. This object reflects the state at which the signal is delivered, rather than in the handler; for example, the mask of blocked signals stored in this object will not contain the mask of new signals blocked through sigaction (2).

(1.4)

Any signals specified in act->sa_mask when registering the handler with sigaction (2) are added to the thread’s signal mask. The signal being delivered is also added to the signal mask, unless SA_NODEFER was specified when registering the handler. These signals are thus blocked while the handler executes.

(2)

Le noyau construit une structure pour le gestionnaire de signal sur la pile. Le noyau rĂšgle le compteur du programme pour le thread pour pointer Ă  la premiĂšre instruction de la fonction du gestionnaire de signal et configure l’adresse de retour pour cette fonction pour pointer vers un Ă©lĂ©ment du code de l’espace utilisateur connu comme « trampoline de signal » (dĂ©crit dans sigreturn (2)).

(3)

Le noyau repasse le contrĂŽle Ă  l’espace utilisateur oĂč l’exĂ©cution commence au dĂ©but de la fonction du gestionnaire de signal.

(4)

Au renvoi du gestionnaire de signal, le contrĂŽle passe au trampoline de signal.

(5)

Le trampoline de signal appelle sigreturn (2), un appel systĂšme qui utilise les informations dans la structure de la pile créée Ă  la premiĂšre Ă©tape pour restaurer le thread dans son Ă©tat avant que le gestionnaire de signal ait Ă©tĂ© appelĂ©. Les paramĂštres du masque de signaux du thread et de la pile de signaux de remplacement sont restaurĂ©s dans le cadre de cette procĂ©dure. À la fin de l’appel Ă  sigreturn (2), le noyau transfĂšre le contrĂŽle Ă  l’espace utilisateur et le thread recommence l’exĂ©cution Ă  partir du point oĂč elle a Ă©tĂ© interrompue par le gestionnaire de signal.

Remarquez que si le gestionnaire de signal ne renvoie pas (par exemple, le contrĂŽle est transfĂ©rĂ© en dehors du gestionnaire en utilisant siglongjmp (3) ou le gestionnaire exĂ©cute un nouveau programme avec execve (2)), alors l’étape finale n’est par rĂ©alisĂ©e. En particulier, dans de tels scĂ©narios, c’est la responsabilitĂ© du programmeur de restaurer l’état du masque de signaux (en utilisant sigprocmask (2)) si le dĂ©blocage des signaux, qui Ă©taient bloquĂ©s par une entrĂ©e dans le gestionnaire de signal, est dĂ©sirĂ©. (Notez que siglongjmp (3) peut ou ne peut pas restaurer le masque de signaux en fonction de la valeur savesigs qui Ă©tait indiquĂ©e dans l’appel correspondant Ă  sigsetjmp (3).)

Du point de vue du noyau, l’exĂ©cution du code du gestionnaire de signal est exactement la mĂȘme que celle n’importe quel code de l’espace utilisateur. C’est-Ă -dire que le noyau n’enregistre aucune information spĂ©ciale d’état indiquant que le thread est actuellement en exĂ©cution Ă  l’intĂ©rieur d’un gestionnaire de signal. Toutes les informations d’état nĂ©cessaires sont entretenues dans des registres de l’espace utilisateur et la pile de l’espace utilisateur. La profondeur Ă  laquelle les gestionnaires de signaux imbriquĂ©s peuvent ĂȘtre invoquĂ©s est donc limitĂ©e seulement par la pile de l’espace utilisateur (et une conception logicielle raisonnable).

Signaux standard

Linux prend en charge les signaux standard listés ci-dessous. La seconde colonne du tableau indique quelle norme (si elle existe) décrit le signal : « P1990 » indique que le signal est décrit dans la norme POSIX.1-1990 originelle. « P2001 » indique que le signal a été ajouté dans SUSv2 et POSIX.1-2001.

Image grohtml-3848030-1.png

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

Jusqu’à Linux 2.2 inclus, l’action par dĂ©faut pour SIGSYS , SIGXCPU , SIGXFSZ et (sur les architectures autres que SPARC ou MIPS) SIGBUS Ă©tait de terminer simplement le processus, sans fichier image mĂ©moire. (Sur certains UNIX, l’action par dĂ©faut pour SIGXCPU et SIGXFSZ est de finir le processus sans fichier image mĂ©moire.) Linux 2.4 se conforme Ă  POSIX.1-2001 pour ces signaux et termine le processus avec un fichier image mĂ©moire.

SIGEMT n’est pas spĂ©cifiĂ© par POSIX.1-2001 mais apparaĂźt nĂ©anmoins sur la plupart des UNIX, avec une action par dĂ©faut typique correspondant Ă  une fin du processus avec fichier image mĂ©moire.

SIGPWR (non spĂ©cifiĂ© dans POSIX.1-2001) est typiquement ignorĂ© sur les autres UNIX oĂč il apparaĂźt.

SIGIO (non spécifié par POSIX.1-2001) est ignoré par défaut sur plusieurs autres systÚmes UNIX.

SĂ©mantiques d’attente et de distribution pour les signaux standard

Si plusieurs signaux standard sont en attente pour un processus, l’ordre dans lequel les signaux sont distribuĂ©s n’est pas prĂ©cisĂ©.

Les signaux standard ne sont pas mis en file d’attente. Si plusieurs instances d’un signal standard sont gĂ©nĂ©rĂ©es pendant que ce signal est bloquĂ©, alors une seule instance du signal est marquĂ©e comme en attente (et le signal sera distribuĂ© une seule fois une fois dĂ©bloquĂ©). Dans le cas ou un signal standard est dĂ©jĂ  en attente, la structure siginfo_t (consultez sigaction (2)) associĂ©e Ă  ce signal n’est pas Ă©crasĂ©e lors de l’arrivĂ©e d’instances suivantes du mĂȘme signal. Par consĂ©quent, le processus recevra les informations associĂ©es Ă  la premiĂšre instance du signal.

Numérotation pour les signaux standard

La valeur numĂ©rique de chaque signal est donnĂ©e dans la table ci-dessous. Comme montrĂ©s dans cette table, plusieurs signaux ont des valeurs numĂ©riques diffĂ©rentes sur des architectures diffĂ©rentes. La premiĂšre valeur dans chaque ligne indique le numĂ©ro de signal sur x86, ARM et la plupart des autres architectures. La seconde valeur indique celui pour Alpha et SPARC. La troisiĂšme indique celui de MIPS et la derniĂšre celui de PA-RISC. Un tiret (-) indique que le signal est absent sur l’architecture correspondante.

Image grohtml-3848030-2.png

Il est à noter que :

-

si dĂ©fini, SIGUNUSED est synonyme de SIGSYS . Depuis la glibc 2.26, SIGUNUSED n’est plus dĂ©fini sur toutes les architectures ;

-

le signal 29 est SIGINFO / SIGPWR (synonymes pour la mĂȘme valeur) sur Alpha mais SIGLOST sur SPARC.

Signaux temps réel

Starting with Linux 2.2, Linux supports real-time signals as originally defined in the POSIX.1b real-time extensions (and now included in POSIX.1-2001). The range of supported real-time signals is defined by the macros SIGRTMIN and SIGRTMAX . POSIX.1-2001 requires that an implementation support at least _POSIX_RTSIG_MAX (8) real-time signals.

Le noyau Linux gĂšre une gamme de 33 signaux temps rĂ©el diffĂ©rents, numĂ©rotĂ©s de 32 Ă  64. Cependant, l’implĂ©mentation des threads POSIX de la glibc utilise en interne deux (pour l’implĂ©mentation NPTL) ou trois (pour l’implĂ©mentation LinuxThreads) signaux temps rĂ©el (consultez pthreads (7)) et ajuste la valeur de SIGRTMIN en consĂ©quence (Ă  34 ou 35). Comme la gamme de signaux temps rĂ©el varie en fonction de l’implĂ©mentation des threads par la glibc (et cette implĂ©mentation peut changer Ă  l’exĂ©cution en fonction du noyau et de la glibc) et que la gamme de signaux temps rĂ©el varie bien sĂ»r Ă©galement suivant les systĂšmes UNIX, les programmes ne devraient jamais faire rĂ©fĂ©rence Ă  des signaux temps rĂ©el en utilisant des numĂ©ros codĂ©s en dur , mais devraient toujours Ă  la place utiliser des signaux temps rĂ©el avec la notation SIGRTMIN +n avec des vĂ©rifications adĂ©quates (lors de l’exĂ©cution) que SIGRTMIN +n ne dĂ©passe pas SIGRTMAX .

Contrairement aux signaux standard, les signaux temps rĂ©el n’ont pas de signification prĂ©dĂ©finie : l’ensemble complet de ces signaux peut ĂȘtre utilisĂ© Ă  des fins spĂ©cifiques Ă  l’application.

L’action par dĂ©faut pour un signal temps rĂ©el non gĂ©rĂ© est de terminer le processus rĂ©cepteur.

Les signaux temps réel se distinguent de la façon suivante :

-

Plusieurs instances d’un signal temps rĂ©el peuvent ĂȘtre mises en file d’attente. Au contraire, si plusieurs instances d’un signal standard arrivent alors qu’il est prĂ©sentement bloquĂ©, une seule instance sera mise en file d’attente.

-

Si le signal est envoyĂ© en utilisant sigqueue (3), il peut ĂȘtre accompagnĂ© d’une valeur (un entier ou un pointeur). Si le processus rĂ©cepteur positionne un gestionnaire pour ce signal en utilisant l’attribut SA_SIGINFO pour l’appel sigaction (2), alors il peut accĂ©der Ă  la valeur transmise dans le champ si_value de la structure siginfo_t passĂ©e en second argument au gestionnaire. De plus, les champs si_pid et si_uid de cette structure fournissent le PID et l’UID rĂ©el du processus Ă©metteur du signal.

-

Les signaux temps rĂ©el sont dĂ©livrĂ©s dans un ordre prĂ©cis. Les divers signaux temps rĂ©el du mĂȘme type sont dĂ©livrĂ©s dans l’ordre oĂč ils ont Ă©tĂ© Ă©mis. Si diffĂ©rents signaux temps rĂ©el sont envoyĂ©s au processus, ils sont dĂ©livrĂ©s en commençant par le signal de numĂ©ro le moins Ă©levĂ© (c’est-Ă -dire le signal de plus fort numĂ©ro est celui de prioritĂ© la plus faible). Par contre, si plusieurs signaux standard sont en attente pour un processus, l’ordre dans lequel ils sont dĂ©livrĂ©s n’est pas dĂ©fini.

Si des signaux standard et des signaux temps rĂ©el sont simultanĂ©ment en attente pour un processus, POSIX ne prĂ©cise pas l’ordre de dĂ©livrance. Linux, comme beaucoup d’autres implĂ©mentations, donne prioritĂ© aux signaux standard dans ce cas.

According to POSIX, an implementation should permit at least _POSIX_SIGQUEUE_MAX (32) real-time signals to be queued to a process. However, Linux does things differently. Up to and including Linux 2.6.7, Linux imposes a system-wide limit on the number of queued real-time signals for all processes. This limit can be viewed and (with privilege) changed via the /proc/sys/kernel/rtsig-max file. A related file, /proc/sys/kernel/rtsig-nr , can be used to find out how many real-time signals are currently queued. In Linux 2.6.8, these /proc interfaces were replaced by the RLIMIT_SIGPENDING resource limit, which specifies a per-user limit for queued signals; see setrlimit (2) for further details.

L’ajout de signaux temps rĂ©el nĂ©cessite l’agrandissement de la structure de l’ensemble des signaux ( sigset_t ) de 32 Ă  64 bits. Par consĂ©quent, divers appels systĂšme ont Ă©tĂ© supplantĂ©s par de nouveaux appels systĂšme qui gĂšrent des ensembles de signaux plus grands. Les anciens et nouveaux appels systĂšme sont les suivants :

Image grohtml-3848030-3.png

Interruption d’appel et de fonction par un gestionnaire de signal

Si un gestionnaire de signal est invoquĂ© pendant qu’un appel systĂšme ou une fonction de bibliothĂšque est bloquĂ©, alors :

-

soit l’appel est automatiquement redĂ©marrĂ© aprĂšs le renvoi du gestionnaire de signal ;

-

soit l’appel Ă©choue avec l’erreur EINTR .

Lequel de ces deux comportements se produira dĂ©pend de l’interface et de si le gestionnaire de signal a Ă©tĂ© mis en place avec l’attribut SA_RESTART (consultez sigaction (2)). Les dĂ©tails varient selon les systĂšmes UNIX ; voici ceux pour Linux.

Si un appel en attente Ă  l’une des interfaces suivantes est interrompu par un gestionnaire de signal, l’appel sera automatiquement redĂ©marrĂ© aprĂšs le renvoi du gestionnaire de signal si l’attribut SA_RESTART a Ă©tĂ© indiqué ; autrement, l’appel Ă©chouera avec l’erreur EINTR :

-

Appels read (2), readv (2), write (2), writev (2) et ioctl (2) sur des pĂ©riphĂ©riques « lents ». Un pĂ©riphĂ©rique « lent » est un pĂ©riphĂ©rique oĂč un appel d’E/S peut bloquer pendant un temps indĂ©fini, par exemple un terminal, un tube ou un socket. Si un appel d’E/S sur un pĂ©riphĂ©rique lent a dĂ©jĂ  transfĂ©rĂ© des donnĂ©es au moment oĂč il est interrompu par un gestionnaire de signal, l’appel renverra une indication de succĂšs (normalement, le nombre d’octets transfĂ©rĂ©s). Remarquez que selon cette dĂ©finition, un disque (local) n’est pas un pĂ©riphĂ©rique lent. Les opĂ©rations d’E/S sur les pĂ©riphĂ©riques disque ne sont pas interrompues par des signaux.

-

open (2), s’il peut bloquer (par exemple, lors de l’ouverture d’une FIFO ; consultez fifo (7)).

-

wait (2), wait3 (2), wait4 (2), waitid (2), et waitpid (2).

-

Interfaces de socket : accept (2), connect (2), recv (2), recvfrom (2), recvmmsg (2), recvmsg (2), send (2), sendto (2) et sendmsg (2), Ă  moins qu’une temporisation n’ait Ă©tĂ© placĂ©e sur le socket (voir ci-dessous).

-

Interfaces de blocage de fichier : flock (2) et les opérations F_SETLKW et F_OFD_SETLKW de fcntl (2)

-

Interfaces de files de messages POSIX : mq_receive (3), mq_timedreceive (3), mq_send (3) et mq_timedsend (3).

-

OpĂ©ration FUTEX_WAIT de futex (2) (depuis Linux 2.6.22 ; auparavant, elle Ă©chouait toujours avec l’erreur EINTR ).

-

getrandom (2).

-

pthread_mutex_lock (3), pthread_cond_wait (3) et autres API apparentées.

-

FUTEX_WAIT_BITSET de futex (2.

-

Interfaces de sĂ©maphores POSIX : sem_wait (3) et sem_timedwait (3) (depuis Linux 2.6.22 ; auparavant, elles Ă©chouaient toujours avec l’erreur EINTR ).

-

read (2) d’un descripteur de fichier d’ inotify (7) (depuis Linux 3.8 ; auparavant, elle Ă©chouait toujours avec l’erreur EINTR ).

Les interfaces suivantes ne sont jamais relancĂ©es aprĂšs avoir Ă©tĂ© interrompues par un gestionnaire de signal, quelle que soit l’utilisation de SA_RESTART ; elles Ă©chouent toujours avec l’erreur EINTR lorsqu’elles sont interrompues par un gestionnaire de signal :

-

Interfaces de socket « entrée », quand un délai de réception ( SO_RCVTIMEO ) a été défini sur le socket en utilisant setsockopt (2) : accept (2), recv (2), recvfrom (2), recvmmsg (2) (aussi avec un paramÚtre timeout non NULL) et recvmsg (2).

-

Interfaces de socket « sortie », quand un délai de réception ( SO_RCVTIMEO ) a été défini sur le socket en utilisant setsockopt (2) : connect (2), send (2), sendto (2) et sendmsg (2).

-

Interfaces utilisées pour attendre des signaux : pause (2), sigsuspend (2), sigtimedwait (2) et sigwaitinfo (2).

-

Interfaces de multiplexage de descripteurs de fichier : epoll_wait (2), epoll_pwait (2), poll (2), ppoll (2), select (2) et pselect (2).

-

Interfaces IPC de System V : msgrcv (2), msgsnd (2), semop (2) et semtimedop (2).

-

Interfaces de sommeil : clock_nanosleep (2), nanosleep (2) et usleep (3).

-

io_getevents (2).

La fonction sleep (3) n’est Ă©galement jamais relancĂ©e si elle est interrompue par un gestionnaire, mais elle renvoie une indication de succĂšs : le nombre de secondes restantes pour le sommeil.

In certain circumstances, the seccomp (2) user-space notification feature can lead to restarting of system calls that would otherwise never be restarted by SA_RESTART ; for details, see seccomp_unotify (2).

Interruption d’appel et de fonction par des signaux d’arrĂȘt

Sous Linux, mĂȘme en l’absence de gestionnaire de signal, certaines interfaces en mode bloquant peuvent Ă©chouer avec l’erreur EINTR aprĂšs que le processus a Ă©tĂ© arrĂȘtĂ© par l’un des signaux d’arrĂȘt et relancĂ© avec le signal SIGCONT . Ce comportement n’est pas ratifiĂ© par POSIX.1 et n’apparaĂźt pas sur d’autres systĂšmes.

Les interfaces Linux qui affichent ce comportement sont :

-

Interfaces de socket « entrée », quand un délai de réception ( SO_RCVTIMEO ) a été défini sur le socket en utilisant setsockopt (2) : accept (2), recv (2), recvfrom (2), recvmmsg (2) (aussi avec un paramÚtre timeout non NULL) et recvmsg (2).

-

Les interfaces de socket « sortie », quand un délai de réception ( SO_RCVTIMEO ) a été défini sur le socket en utilisant setsockopt (2) : connect (2), send (2), sendto (2) et sendmsg (2), si un délai de transmission ( SO_SNDTIMEO ) a été défini.

-

epoll_wait (2), epoll_pwait (2).

-

semop (2), semtimedop (2).

-

sigtimedwait (2), sigwaitinfo (2).

-

Linux 3.7 et antérieurs : read (2) sur un descripteur de fichier inotify (7).

-

Linux 2.6.21 et antérieurs : opération FUTEX_WAIT de futex (2), sem_timedwait (3), sem_wait (3).

-

Linux 2.6.8 et antérieurs : msgrcv (2), msgsnd (2).

-

Linux 2.4 et antérieurs : nanosleep (2).

STANDARDS

POSIX.1, sauf indication contraire.

NOTES

Pour une discussion sur les fonctions sûres de signal asynchrone, consultez signal-safety (7).

The /proc/ pid /task/ tid /status file contains various fields that show the signals that a thread is blocking ( SigBlk ), catching ( SigCgt ), or ignoring ( SigIgn ). (The set of signals that are caught or ignored will be the same across all threads in a process.) Other fields show the set of pending signals that are directed to the thread ( SigPnd ) as well as the set of pending signals that are directed to the process as a whole ( ShdPnd ). The corresponding fields in /proc/ pid /status show the information for the main thread. See proc (5) for further details.

BOGUES

Six signaux existent qui peuvent ĂȘtre dĂ©livrĂ©s Ă  cause d’une exception matĂ©rielle : SIGBUS , SIGEMT , SIGFPE , SIGILL , SIGSEGV et SIGTRAP . Lequel de ces signaux est dĂ©livrĂ© pour n’importe quelle exception matĂ©rielle n’est pas documentĂ© et semble parfois ne pas ĂȘtre logique.

Par exemple, un accĂšs mĂ©moire non autorisĂ© qui provoque l’envoi de SIGSEGV sur une architecture peut provoquer l’envoi de SIGBUS sur une autre architecture ou vice versa.

Comme autre exemple, l’utilisation de l’instruction int de x86 avec un argument interdit (tout nombre autre que 3 ou 128) provoque l’envoi de SIGSEGV mĂȘme si SIGILL serait plus adaptĂ© Ă  cause de la façon dont le CPU rapporte l’opĂ©ration interdite au noyau.

VOIR AUSSI

kill (1), clone (2), getrlimit (2), kill (2), pidfd_send_signal (2), restart_syscall (2), rt_sigqueueinfo (2), setitimer (2), setrlimit (2), sgetmask (2), sigaction (2), sigaltstack (2), signal (2), signalfd (2), sigpending (2), sigprocmask (2), sigreturn (2), sigsuspend (2), sigwaitinfo (2), abort (3), bsd_signal (3), killpg (3), longjmp (3), pthread_sigqueue (3), raise (3), sigqueue (3), sigset (3), sigsetops (3), sigvec (3), sigwait (3), strsignal (3), swapcontext (3), sysv_signal (3), core (5), proc (5), nptl (7), pthreads (7), sigevent (3type)

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-Paul Guillonneau <guillonneau.jeanpaul@free.fr>

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 .