.\" -*- coding: UTF-8 -*- .\" Copyright (c) 1994,1995 Mike Battersby .\" and Copyright 2004, 2005 Michael Kerrisk .\" based on work by faith@cs.unc.edu .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" Modified, aeb, 960424 .\" Modified Fri Jan 31 17:31:20 1997 by Eric S. Raymond .\" Modified Thu Nov 26 02:12:45 1998 by aeb - add SIGCHLD stuff. .\" Modified Sat May 8 17:40:19 1999 by Matthew Wilcox .\" add POSIX.1b signals .\" Modified Sat Dec 29 01:44:52 2001 by Evan Jones .\" SA_ONSTACK .\" Modified 2004-11-11 by Michael Kerrisk .\" Added mention of SIGCONT under SA_NOCLDSTOP .\" Added SA_NOCLDWAIT .\" Modified 2004-11-17 by Michael Kerrisk .\" Updated discussion for POSIX.1-2001 and SIGCHLD and sa_flags. .\" Formatting fixes .\" 2004-12-09, mtk, added SI_TKILL + other minor changes .\" 2005-09-15, mtk, split sigpending(), sigprocmask(), sigsuspend() .\" out of this page into separate pages. .\" 2010-06-11 Andi Kleen, add hwpoison signal extensions .\" 2010-06-11 mtk, improvements to discussion of various siginfo_t fields. .\" 2015-01-17, Kees Cook .\" Added notes on ptrace SIGTRAP and SYS_SECCOMP. .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH sigaction 2 "3 mai 2023" "Pages du manuel de Linux 6.05.01" .SH NOM sigaction, rt_sigaction \- Examiner et modifier l'action associée à un signal .SH BIBLIOTHÈQUE Bibliothèque C standard (\fIlibc\fP, \fI\-lc\fP) .SH SYNOPSIS .nf \fB#include \fP .PP \fBint sigaction(int \fP\fIsignum\fP\fB,\fP \fB const struct sigaction *_Nullable restrict \fP\fIact\fP\fB,\fP \fB struct sigaction *_Nullable restrict \fP\fIoldact\fP\fB);\fP .fi .PP .RS -4 Exigences de macros de test de fonctionnalités pour la glibc (consulter \fBfeature_test_macros\fP(7))\ : .RE .PP \fBsigaction\fP()\ : .nf _POSIX_C_SOURCE .fi .PP \fIsiginfo_t\fP\ : .nf _POSIX_C_SOURCE >= 199309L .fi .SH DESCRIPTION L'appel système \fBsigaction\fP() sert à modifier l'action effectuée par un processus à la réception d'un signal spécifique. (Consultez \fBsignal\fP(7) pour une vue d'ensemble sur les signaux) .PP \fIsignum\fP indique le signal concerné, à l'exception de \fBSIGKILL\fP et \fBSIGSTOP\fP. .PP Si \fIact\fP n'est pas NULL, la nouvelle action pour le signal \fIsignum\fP est définie par \fIact\fP. Si \fIoldact\fP n'est pas NULL, l'ancienne action est sauvegardée dans \fIoldact\fP. .PP La structure \fIsigaction\fP est définie par quelque chose comme\ : .PP .in +4n .EX struct sigaction { void (*sa_handler)(int); void (*sa_sigaction)(int, siginfo_t *, void *); sigset_t sa_mask; int sa_flags; void (*sa_restorer)(void); }; .EE .in .PP Sur certaines architectures, on emploie une union. Il ne faut donc pas utiliser ou remplir simultanément \fIsa_handler\fP et \fIsa_sigaction\fP. .PP Le champ \fIsa_restorer\fP n'est pas conçu pour une utilisation dans une application (POSIX ne spécifie pas de champ \fIsa_restorer\fP). Vous pouvez trouver plus de détails sur l'objectif de ce champ dans \fBsigreturn\fP(2). .PP \fIsa_handler\fP indique l'action à associer à \fIsignum\fP et il peut s'agir d'une des suivantes\ : .IP \- 3 \fBSIG_DFL\fP pour l'action par défaut. .IP \- \fBSIG_IGN\fP pour ignorer ce signal. .IP \- Un pointeur vers une fonction de gestion de signal. Cette fonction reçoit le numéro du signal comme seul paramètre. .PP Si \fBSA_SIGINFO\fP est indiqué dans \fIsa_flags\fP, \fIsa_sigaction\fP (et non \fIsa_handler\fP) indique la fonction de gestion de signal dans \fIsignum\fP. Cette fonction reçoit trois paramètres, comme décrit ci\-dessous. .PP \fIsa_mask\fP spécifie un masque de signaux à bloquer (c'est\-à\-dire ajoutés au masque de signaux du thread dans lequel le gestionnaire est appelé) pendant l'exécution du gestionnaire. De plus le signal ayant appelé le gestionnaire est bloqué à moins que l'attribut \fBSA_NODEFER\fP soit précisé. .PP \fIsa_flags\fP spécifie un ensemble d'attributs qui modifient le comportement du signal. Il est formé par un OU binaire «\ |\ ») entre les options suivantes\ : .TP \fBSA_NOCLDSTOP\fP Si \fIsignum\fP vaut \fBSIGCHLD\fP, ne pas recevoir les signaux de notification d'arrêt (quand l'enfant reçoit un signal \fBSIGSTOP\fP, \fBSIGTSTP\fP, \fBSIGTTIN\fP ou \fBSIGTTOU\fP) ou de relance (quand il reçoit \fBSIGCONT\fP) des processus enfant. Consultez \fBwait\fP(2). Cet attribut n'a de sens que lors de la mise en place d'un gestionnaire pour \fBSIGCHLD\fP. .TP \fBSA_NOCLDWAIT\fP (depuis Linux 2.6) .\" To be precise: Linux 2.5.60 -- MTK Si \fIsignum\fP vaut \fBSIGCHLD\fP, ne pas transformer les enfants en zombies lorsqu'ils se terminent. Consultez aussi \fBwaitpid\fP(2). Cet attribut n'a de sens que lors de la mise en place d'un gestionnaire pour \fBSIGCHLD\fP, ou lors de la configuration de la disposition de signal de \fBSIG_DFL\fP. .IP Si l'attribut \fBSA_NOCLDWAIT\fP est défini lors de la mise en place d'un gestionnaire pour \fBSIGCHLD\fP, POSIX.1 ne spécifie pas si le signal \fBSIGCHLD\fP est généré lorsqu'un processus enfant se termine. Sous Linux, un signal \fBSIGCHLD\fP est généré dans ce cas\ ; sur d'autres implémentations, il ne l'est pas. .TP \fBSA_NODEFER\fP Ne pas ajouter le signal au masque de signal du thread pendant l'exéution du gestionnaire, sauf si le signal est indiqué dans \fIact.sa_mask\fP. Par conséquent, une prochaine instance du signal pourra être délivrée au thread pendant qu'il exécute le gestionnaire. Ce drapeau n'a de sens que lorsqu'on met en place un gestionnaire de signal. .IP \fBSA_NOMASK\fP est un synonyme obsolète et non standard de ce drapeau. .TP \fBSA_ONSTACK\fP Appeler le gestionnaire avec une pile différente fournie par \fBsigaltstack\fP(2). Si cette pile est indisponible, on utilisera la pile par défaut. Cet attribut n'a de sens que lors de la mise en place d'un gestionnaire de signal. .TP \fBSA_RESETHAND\fP Rétablir l'action à son comportement par défaut à l'entrée dans le gestionnaire de signal. Cet attribut n'a de sens que lors de la mise en place d'un gestionnaire de signal. .IP \fBSA_ONESHOT\fP est un synonyme obsolète et non standard de ce drapeau. .TP \fBSA_RESTART\fP Fournir un comportement compatible avec la sémantique BSD en redémarrant automatiquement les appels système lents interrompus par l'arrivée du signal. Cet attribut n'a de sens que lors de la mise en place d'un gestionnaire de signal. Consultez \fBsignal\fP(7) pour une discussion sur le redémarrage d'un appel système. .TP \fBSA_RESTORER\fP \fIN'est pas conçu pour être utilisé dans une application.\fP Ce drapeau est utilisé par les bibliothèques\ C pour indiquer que le champ \fIsa_restorer\fP contient l'adresse d'un «\ trampoline de signal\ ». Consultez \fBsigreturn\fP(2) pour plus de détails. .TP \fBSA_SIGINFO\fP (depuis Linux 2.2) .\" (The .\" .I sa_sigaction .\" field was added in Linux 2.1.86.) .\" Le gestionnaire de signal recevra trois arguments, et non plus un seul. Dans ce cas, il faut utiliser le membre \fIsa_sigaction\fP au lieu de \fIsa_handler\fP. Cet attribut n'a de sens que lors de la mise en place d'un gestionnaire de signal. .TP \fBSA_UNSUPPORTED\fP (depuis Linux 5.11) Utilisé pour sonder de manière dynamique la prise en charge des bits de drapeau. .IP Si un essai d'enregistrement de gestionnaire réussit alors que ce drapeau est positionné sur \fIact\->sa_flags\fP parmi d'autres drapeaux potentiellement non pris en charge par le noyau, et si un appel \fBsigaction\fP() immédiatement consécutif indiquant un numéro de signal et ayant un paramètre \fIoldact\fP non NULL aboutit à un \fIclear\fP \fBSA_UNSUPPORTED\fP dans \fIoldact\->sa_flags\fP, \fIoldact\->sa_flags\fP peut être utilisé comme masque de bit décrivant les drapeaux potentiellement non pris en charge qui sont en réalité gérés. Consultez la section «\ Sonder dynamiquement la prise en charge de bits de drapeau\ » ci\-dessous pour plus de détails. .TP \fBSA_EXPOSE_TAGBITS\fP (depuis Linux 5.11) Normalement, lorsqu'un signal est délivré, un jeu de bits d'étiquettes spécifique à l'architecture est vidé depuis le champ \fIsi_addr\fP de \fIsiginfo_t\fP. Si ce drapeau est positionné, un sous\-ensemble de bits d'étiquette spécifique à l'architecture sera conservé dans \fIsi_addr\fP. .IP Les programmes qui doivent être compatibles avec des versions de Linux supérieures à la\ 5.11 doivent utiliser \fBSA_UNSUPPORTED\fP pour tester la prise en charge. .SS "Le paramètre siginfo_t vers un gestionnaire SA_SIGINFO" Quand le drapeau \fBSA_SIGINFO\fP est indiqué à \fIact.sa_flags\fP, l'adresse du gestionnaire de signal est passée à l'aide du champ \fIact.sa_sigaction\fP. Ce gestionnaire prend trois paramètres comme suit\ : .PP .in +4n .EX void handler(int sig, siginfo_t *info, void *ucontext) { ... } .EE .in .PP Ces trois paramètres sont comme suit .TP \fIsig\fP Le numéro de signal qui a provoqué l'appel du gestionnaire. .TP \fIinfo\fP Un pointeur vers un \fIsiginfo_t\fP, qui est une structure contenant plus d'informations sur le signal comme décrit ci\-dessous. .TP \fIucontext\fP Il s'agit d'un pointeur vers une structure \fIucontext_t\fP, diffusée sur \fIvoid\\ *\fP. La structure vers laquelle pointe ce champ contient des informations contextuelles sur le signal sauvegardées dans la pile de l'espace utilisateur par le noyau\ ; pour des détails, consultez \fBsigreturn\fP(2). Vous pouvez trouver plus d'informations sur la structure \fIucontext_t\fP dans \fBgetcontext\fP(3) et \fBsignal\fP(7). Généralement, la fonction de gestionnaire n'utilise pas le troisième paramètre. .PP Le type de données \fIsiginfo_t\fP est une structure contenant les champs suivants\ : .PP .in +4n .EX .\" FIXME .\" The siginfo_t 'si_trapno' field seems to be used .\" only on SPARC and Alpha; this page could use .\" a little more detail on its purpose there. .\" In the kernel: si_tid siginfo_t { int si_signo; /* Numéro de signal */ int si_errno; /* Numéro d'erreur */ int si_code; /* Code du signal */ int si_trapno; /* Numéro de trappe qui a causé le signal généré par le matériel (pas utilisé sur la plupart des architectures) */ pid_t si_pid; /* PID de l'émetteur */ uid_t si_uid; /* UID réel de l'émetteur */ int si_status; /* Valeur de sortie ou signal */ clock_t si_utime; /* Temps utilisateur écoulé */ clock_t si_stime; /* Temps système écoulé */ union sigval si_value; /* Valeur du signal */ int si_int; /* Signal POSIX.1b */ void *si_ptr; /* Signal POSIX.1b */ int si_overrun; /* Décompte de dépassement des horloges\ (POSIX.1b) */ int si_timerid; /* ID d'horloge (POSIX.1b) */ void *si_addr; /* Emplacement mémoire ayant causé l'erreur */ long si_band; /* Band event (était \fIint\fP dans glibc 2.3.2 et antérieures */ int si_fd; /* Descripteur de fichier */ short si_addr_lsb; /* Bit le moins significatif de l'adresse (depuis Linux 2.6.32) */ void *si_lower; /* Limite inférieure lorsqu'une violation d'adresse se produit (depuis Linux 3.19) */ void *si_upper; /* Limite supérieure lorsqu'une violation d'adresse se produit (depuis Linux 3.19) */ int si_pkey; /* Clé de protection PTE à l'origine de l'ereur (depuis Linux 4.6) */ void *si_call_addr; /* Adresse de l'instruction d'appel système (depuis Linux 3.5) */ int si_syscall; /* Nombre d'appels système essayés (depuis Linux 3.5) */ unsigned int si_arch; /* Architecture des appels système essayés (depuis Linux 3.5) */ } .EE .in .PP \fIsi_signo\fP, \fIsi_errno\fP et \fIsi_code\fP sont définis pour tous les signaux (\fIsi_errno\fP n'est généralement pas utilisé sous Linux). Le reste de la structure peut être une union, de telle sorte qu'on puisse ne lire que les champs spécifiques à un signal donné\ : .IP \- 3 Les signaux envoyés avec \fBkill\fP(2) et \fBsigqueue\fP(3) remplissent \fIsi_pid\fP et \fIsi_uid\fP. De plus, les signaux envoyés avec \fBsigqueue\fP(3) remplissent \fIsi_int\fP et \fIsi_ptr\fP avec les valeurs indiquées par l'émetteur du signal\ ; consultez \fBsigqueue\fP(3) pour plus de détails. .IP \- Les signaux envoyés par les horloges POSIX.1b (depuis Linux\ 2.6) remplissent \fIsi_overrun\fP et \fIsi_timerid\fP. Le champ \fIsi_timerid\fP est un identifiant interne utilisé par le noyau pour identifier l'horloge\ ; ce n'est pas la même chose que l'identifient d'horloge renvoyé par \fBtimer_create\fP(2). Le champ \fIsi_overrun\fP est le compteur de dépassement de l'horloge\ ; il s'agit de la même information renvoyée par un appel à \fBtimer_getoverrun\fP(2). Ces champs sont des extensions Linux non standard. .IP \- Les signaux envoyés pour les notifications de files de messages (voyez la description de \fBSIGEV_SIGNAL\fP dans \fBmq_notify\fP(3)) remplissent \fIsi_int\fP/\fIsi_ptr\fP avec la valeur \fIsigev_value\fP fournie à \fBmq_notify\fP(3)\ ; \fIsi_pid\fP avec l'identifiant du processus de l'émetteur du message\ ; et \fIsi_uid\fP avec l'identifiant d'utilisateur réel de l'émetteur du message. .IP \- .\" FIXME . .\" When si_utime and si_stime where originally implemented, the .\" measurement unit was HZ, which was the same as clock ticks .\" (sysconf(_SC_CLK_TCK)). In Linux 2.6, HZ became configurable, and .\" was *still* used as the unit to return the info these fields, .\" with the result that the field values depended on the .\" configured HZ. Of course, the should have been measured in .\" USER_HZ instead, so that sysconf(_SC_CLK_TCK) could be used to .\" convert to seconds. I have a queued patch to fix this: .\" http://thread.gmane.org/gmane.linux.kernel/698061/ . .\" This patch made it into Linux 2.6.27. .\" But note that these fields still don't return the times of .\" waited-for children (as is done by getrusage() and times() .\" and wait4()). Solaris 8 does include child times. \fBSIGCHLD\fP remplit \fIsi_pid\fP, \fIsi_uid\fP, \fIsi_status\fP, \fIsi_utime\fP et \fIsi_stime\fP, pour fournir des informations au sujet des enfants. Le champ \fIsi_pid\fP est l'identifiant de processus de l'enfant\ ; \fIsi_uid\fP est l'identifiant d'utilisateur réel de l'enfant. Le champ \fIsi_status\fP contient le code de sortie de l'enfant (si \fIsi_code\fP vaut \fBCLD_EXITED\fP), ou le numéro du signal qui a changé l'etat du processus. Les champs \fIsi_utime\fP et \fIsi_stime\fP comprennent les temps utilisateur et système utilisé par le processus enfant\ ; ces champs ne comprennent pas le temps utilisé par les enfants lorsqu'ils sont attendus (au contraire de \fBgetrusage\fP(2) et \fBtimes\fP(2)). Jusqu'à Linux\ 2.6, et depuis Linux\ 2.6.27, ces champs renvoient le temps CPU en unité de \fIsysconf(_SC_CLK_TCK)\fP. Dans les noyaux Linux\ 2.6, avant Linux\ 2.6.27, un bogue faisait que ces champs renvoyaient des temps mesurés en jiffy système (configurable) (consultez \fBtime\fP(7)). .IP \- \fBSIGILL\fP, \fBSIGFPE\fP, \fBSIGSEGV\fP, \fBSIGBUS\fP et \fBSIGTRAP\fP remplissent \fIsi_addr\fP avec l'adresse de l'erreur. Sur certaines architectures, ces signaux remplissent aussi le champ \fIsi_trapno\fP. .IP Certaines sous\-erreurs de \fBSIGBUS\fP, en particulier \fBBUS_MCEERR_AO\fP et \fBBUS_MCEERR_AR\fP, remplissent également \fIsi_addr_lsb\fP. Ce champ indique le bit le moins significatif de l'adresse signalée et, donc, l'étendue de la corruption. Par exemple, si toute une page est corrompue, \fIsi_addr_lsb\fP contient \fIlog2(sysconf(_SC_PAGESIZE))\fP. Lorsque \fBSIGTRAP\fP est délivré en réponse à un événement \fBptrace\fP(2) ((PTRACE_EVENT_foo), \fIsi_addr\fP n'est pas peuplé mais \fIsi_pid\fP et \fIsi_uid\fP le sont avec leur identifiant de processus et d'utilisateur respectifs responsables de cette trappe. Dans le cas de \fBseccomp\fP(2), le traceur sera affiché comme délivrant un événement. \fBBUS_MCEERR_*\fP et \fIsi_addr_lsb\fP sont des extensions spécifiques à Linux. .IP La sous\-erreur de \fBSEGV_BNDERR\fP de \fBSIGSEGV\fP peuple \fIsi_lower\fP et \fIsi_upper\fP. .IP La sous\-erreur \fBSEGV_PKUERR\fP de \fBSIGSEGV\fP peuple \fIsi_pkey\fP. .IP \- \fBSIGPOLL\fP/\fBSIGIO\fP (synonymes sous Linux) remplissent \fIsi_band\fP et \fIsi_fd\fP. L'événement \fIsi_band\fP est un masque de bits contenant les mêmes valeurs que celles qui sont remplies dans le champ \fIrevents\fP par \fBpoll\fP(2). Le champ \fIsi_fd\fP donne le descripteur de fichiers sur lequel l'événement d'entrées\-sorties s'est produit. Pour plus de détails, voir la description de \fBF_SETSIG\fP dans \fBfcntl\fP(2). .IP \- .\" commit a0727e8ce513fe6890416da960181ceb10fbfae6 .\" \fBSIGSYS\fP, généré (depuis Linux\ 3.5) quand un filtre seccomp renvoie \fBSECCOMP_RET_TRAP\fP, remplit \fIsi_call_addr\fP, \fIsi_syscall\fP, \fIsi_arch\fP, \fIsi_errno\fP et d'autres décrits dans \fBseccomp\fP(2). .SS "Le champ si_code" Le champ \fIsi_code\fP du paramètre \fIsiginfo_t\fP passé à un gestionnaire de signal \fBSA_SIGINFO\fP est une valeur (et non un masque de bit) indiquant la raison de l'envoi de ce signal. Pour un événement \fBptrace\fP(2), \fIsi_code\fP contiendra \fBSIGTRAP\fP et aura l'événement ptrace dans l'octet fort\ : .PP .in +4n .EX (SIGTRAP | PTRACE_EVENT_foo << 8). .EE .in .PP Pour un événement non \fBptrace\fP(2), les valeurs qui peuvent apparaître dans \fIsi_code\fP sont décrites dans le reste de cette section. Depuis la glibc\ 2.20, les définitions de la plupart de ces symboles viennent de \fI\fP en définissant des macros de test de fonctionnalités (avant l'inclusion de \fItout\fP fichier d'en\-tête) comme suit\ : .IP \- 3 \fB_XOPEN_SOURCE\fP avec la valeur 500 ou supérieure\ ; .IP \- \fB_XOPEN_SOURCE\fP et \fB_XOPEN_SOURCE_EXTENDED\fP\ ; ou .IP \- \fB_POSIX_C_SOURCE\fP avec la valeur 200809L ou supérieure. .PP Pour les constantes \fBTRAP_*\fP, les définitions de symboles ne sont fournies que dans les deux premiers cas. Avant la glibc\ 2.20, aucune macro de test n'était nécessaire pour obtenir ces symboles. .PP Pour un signal normal, la liste suivante indique les valeurs que peut prendre \fIsi_code\fP pour n'importe quel signal, avec la raison associée. .RS 4 .TP \fBSI_USER\fP \fBkill\fP(2). .TP \fBSI_KERNEL\fP Envoyé par le noyau. .TP \fBSI_QUEUE\fP \fBsigqueue\fP(3). .TP \fBSI_TIMER\fP Fin d'une temporisation POSIX. .TP \fBSI_MESGQ\fP (depuis Linux 2.6.6) Changement d'état d'une file de messages\ ; voir \fBmq_notify\fP(3). .TP \fBSI_ASYNCIO\fP Fin d'une AIO. .TP \fBSI_SIGIO\fP \fBSIGIO\fP avec file d'attente (seulement jusqu'à Linux\ 2.2\ ; à partir de Linux\ 2.4, \fBSIGIO\fP/\fBSIGPOLL\fP remplit \fIsi_code\fP de la façon décrite plus bas). .TP \fBSI_TKILL\fP (depuis Linux 2.4.19) .\" SI_DETHREAD is defined in Linux 2.6.9 sources, but isn't implemented .\" It appears to have been an idea that was tried during 2.5.6 .\" through to Linux 2.5.24 and then was backed out. \fBtkill\fP(2) ou \fBtgkill\fP(2). .RE .PP Les valeurs suivantes peuvent être prises par \fIsi_code\fP pour un signal \fBSIGILL\fP\ : .RS 4 .TP \fBILL_ILLOPC\fP opcode illégal. .TP \fBILL_ILLOPN\fP opérande illégale. .TP \fBILL_ILLADR\fP Mode d'adressage illégal. .TP \fBILL_ILLTRP\fP Trappe illégale. .TP \fBILL_PRVOPC\fP Opcode privilégié. .TP \fBILL_PRVREG\fP Registre privilégié. .TP \fBILL_COPROC\fP Erreur de coprocesseur. .TP \fBILL_BADSTK\fP erreur interne de pile. .RE .PP Les valeurs suivantes peuvent être prises par \fIsi_code\fP pour un signal \fBSIGFPE\fP\ : .RS 4 .TP \fBFPE_INTDIV\fP division entière par zéro. .TP \fBFPE_INTOVF\fP débordement entier. .TP \fBFPE_FLTDIV\fP division flottante par zéro. .TP \fBFPE_FLTOVF\fP débordement flottant. .TP \fBFPE_FLTUND\fP débordement inférieur flottant. .TP \fBFPE_FLTRES\fP résultat flottant inexact. .TP \fBFPE_FLTINV\fP opération flottante invalide. .TP \fBFPE_FLTSUB\fP indice hors intervalle. .RE .PP Les valeurs suivantes peuvent être prises par \fIsi_code\fP pour un signal \fBSIGSEGV\fP\ : .RS 4 .TP \fBSEGV_MAPERR\fP adresse sans objet. .TP \fBSEGV_ACCERR\fP permissions invalides pour l'objet. .TP \fBSEGV_BNDERR\fP (depuis Linux 3.19) .\" commit ee1b58d36aa1b5a79eaba11f5c3633c88231da83 Vérification des limites de l'adresse échouée. .TP \fBSEGV_PKUERR\fP (depuis Linux 4.6) .\" commit cd0ea35ff5511cde299a61c21a95889b4a71464e Accès interdit par des clés de protection de la mémoire. Consultez \fBpkeys\fP(7). La clé de protection applicable à cet accès est disponible à l'aide de \fIsi_pkey\fP. .RE .PP Les valeurs suivantes peuvent être prises par \fIsi_code\fP pour un signal \fBSIGBUS\fP\ : .RS 4 .TP \fBBUS_ADRALN\fP alignement d'adresse non valable. .TP \fBBUS_ADRERR\fP adresse physique inexistante. .TP \fBBUS_OBJERR\fP erreur matérielle spécifique. .TP \fBBUS_MCEERR_AR\fP (depuis Linux 2.6.32) erreur mémoire matérielle consommée lors de vérification de la machine\ ; action requise. .TP \fBBUS_MCEERR_AO\fP (depuis Linux 2.6.32) erreur mémoire matérielle détectée dans le processus mais non consommée\ ; action optionnelle. .RE .PP Les valeurs suivantes peuvent être prises par \fIsi_code\fP pour un signal \fBSIGTRAP\fP\ : .RS 4 .TP \fBTRAP_BRKPT\fP point d'arrêt du processus. .TP \fBTRAP_TRACE\fP trappe dans le suivi d'exécution du processus. .TP \fBTRAP_BRANCH\fP (depuis Linux 2.4, IA64 seulement) trappe dans le suivi des branches prises par le processus. .TP \fBTRAP_HWBKPT\fP (depuis Linux 2.4, IA64 seulement) point d'arrêt/point à surveiller matériels. .RE .PP Les valeurs suivantes peuvent être prises par \fIsi_code\fP pour un signal \fBSIGCHLD\fP\ : .RS 4 .TP \fBCLD_EXITED\fP enfant terminé normalement. .TP \fBCLD_KILLED\fP enfant tué par un signal. .TP \fBCLD_DUMPED\fP enfant terminé anormalement. .TP \fBCLD_TRAPPED\fP l'enfant en cours de suivi a une trappe. .TP \fBCLD_STOPPED\fP L'enfant s'est arrêté. .TP \fBCLD_CONTINUED\fP (depuis Linux 2.6.9) l'enfant arrêté a redémarré. .RE .PP Les valeurs suivantes peuvent être prises par \fIsi_code\fP pour un signal \fBSIGIO\fP/\fBSIGPOLL\fP\ : .RS 4 .TP \fBPOLL_IN\fP données disponibles en entrée. .TP \fBPOLL_OUT\fP tampons de sortie libres. .TP \fBPOLL_MSG\fP message disponible en entrée. .TP \fBPOLL_ERR\fP Erreur d'entrée\-sortie. .TP \fBPOLL_PRI\fP entrée à haute priorité disponible. .TP \fBPOLL_HUP\fP périphérique débranché. .RE .PP Les valeurs suivantes peuvent être prises par \fIsi_code\fP pour un signal \fBSIGSYS\fP\ : .RS 4 .TP \fBSYS_SECCOMP\fP (depuis Linux 3.5) Différé par une règle de filtrage \fBseccomp\fP(2). .RE .SS "Sondage dynamique de la prise en charge des bits de drapeau" L'appel \fBsigaction\fP() sur Linux accepte des jeux de bits inconnus \fIact\->sa_flags\fP sans erreur. Le comportement du noyau, à partir de Linux\ 5.11, est qu'un deuxième \fBsigaction\fP(2) videra les bits inconnus de \fIoldact\->sa_flags\fP. Toutefois, historiquement, un second appel \fBsigaction\fP() laissait généralement ces ensembles de bits dans \fIoldact\->sa_flags\fP. .PP Cela signifie que la prise en charge de nouveaux drapeaux ne peut pas être détectée par un simple test du drapeau \fIsa_flags\fP dans \fIsa_flags\fP et un programme doit tester que \fBSA_UNSUPPORTED\fP a été vidé avant de s'appuyer sur le contenu de \fIsa_flags\fP. .PP Comme le comportement du gestionnaire ne peut pas être garanti, sauf si la vérification réussit, il vaut mieux soit bloquer le signal concerné tout en enregistrant le gestionnaire puis effectuer la vérification dans ce cas, soit, quand cela n'est pas possible, par exemple si le signal est synchrone, effectuer le deuxième \fBsigaction\fP() dans le gestionnaire de signal lui\-même. .PP Dans les noyaux qui ne prennent pas en charge un drapeau en particulier, le comportement du noyau est le même que si le drapeau n'était pas positionné, même si ce dernier a été positionné avec \fIact\->sa_flags\fP. .PP Les drapeaux \fBSA_NOCLDSTOP\fP, \fBSA_NOCLDWAIT\fP, \fBSA_SIGINFO\fP, \fBSA_ONSTACK\fP, \fBSA_RESTART\fP, \fBSA_NODEFER\fP, \fBSA_RESETHAND\fP et, s'il est défini par l'architecture, \fBSA_RESTORER\fP, peuvent ne pas être sondés de manière fiable si on utilise ce mécanisme, parce qu'ils ont été introduits avant Linux\ 5.11. Cependant, en général, les programmes peuvent supposer que ces drapeaux sont pris en charge car ils le sont depuis Linux\ 2.6, publié en 2003. .PP Consultez les EXEMPLES ci\-dessous pour une démonstration de l'utilisation de \fBSA_UNSUPPORTED\fP. .SH "VALEUR RENVOYÉE" \fBsigaction\fP() renvoie \fB0\fP s'il réussit. En cas d'erreur, \fB\-1\fP est renvoyé et \fIerrno\fP contient le code d'erreur. .SH ERREURS .TP \fBEFAULT\fP \fIact\fP ou \fIoldact\fP pointent en\-dehors de l'espace d'adressage accessible. .TP \fBEINVAL\fP Un signal non valable est indiqué. Cela se produit également si l'on tente de modifier l'action associée aux signaux \fBSIGKILL\fP ou \fBSIGSTOP\fP, qui ne peuvent pas être interceptés ou ignorés. .SH VERSIONS .SS "Différences entre bibliothèque C et noyau" La fonction enveloppe de la glibc autour de \fBsigacttion\fP() donne une erreur (\fBEINVAL\fP) lorsqu'on essaie de changer la position des deux signaux en temps réel utilisés en interne par l'implémentation de threading de NPTL. Consultez \fBnptl\fP(7) pour plus de détails. .PP Sur des architectures où le trampoline du signal se trouve dans la bibliothèque\ C, la fonction enveloppe de la bibliothèque\ C autour de \fBsigaction\fP() met l'adresse du code de trampoline dans le champ \fIact.sa_restorer\fP et positionne le drapeau \fBSA_RESTORER\fP du champ \fIact.sa_flags\fP. Consultez \fBsigreturn\fP(2). .PP L'appel système Linux d'origine s'appelait \fBsigaction\fP(). Toutefois, avec l'arrivée des signaux en temps réel dans Linux\ 2.2 et de la taille figée, le type \fIsigset_t\fP 32 bits pris en charge par cet appel système ne convenait plus à cet objectif. Par conséquent, un nouvel appel système \fBrt_sigaction\fP() a été ajouté pour prendre en charge le type \fIsigset_t\fP élargi. Le nouvel appel système prend un quatrième paramètre, \fIsize_t sigsetsize\fP, qui indique la taille en octets des jeux de signal dans \fIact.sa_mask\fP et \fIoldact.sa_mask\fP. Ce paramètre est actuellement nécessaire pour obtenir la valeur \fIsizeof(sigset_t)\fP (ou le résultat de l'erreur \fBEINVAL\fP). La fonction enveloppe \fBsigaction\fP() de la glibc nous cache ces détails en appelant de manière transparente \fBrt_sigaction\fP() quand le noyau le fournit. .SH STANDARDS POSIX.1\-2008. .SH HISTORIQUE .\" SVr4 does not document the EINTR condition. POSIX.1\-2001, SVr4. .PP POSIX.1\-1990 interdisait de positionner \fBSIGCHLD\fP avec \fBSIG_IGN\fP. POSIX.1\-2001 l'autorise, et ignorer \fBSIGCHLD\fP permet donc d'éviter la création de zombies (consultez \fBwait\fP(2)). Cependant, les comportements historiques de BSD et de System\ V quand \fBSIGCHLD\fP est ignoré diffèrent, si bien que la seule méthode complètement portable pour s'assurer que les enfants ne deviennent pas des zombies à leur terminaison est d'intercepter le signal \fBSIGCHLD\fP et d'invoquer \fBwait\fP(2) ou équivalent. .PP POSIX.1\-1990 ne documentait que \fBSA_NOCLDSTOP\fP. POSIX.1\-2001 a ajouté \fBSA_NOCLDWAIT\fP, \fBSA_RESETHAND\fP, \fBSA_NODEFER\fP, \fBSA_ONSTACK\fP, \fBSA_RESETHAND\fP, \fBSA_RESTART\fP et \fBSA_SIGINFO\fP. L'utilisation de ces dernières valeurs dans \fIsa_flags\fP peut être moins portable dans les applications censées s'exécuter sur des implémentations UNIX anciennes. .PP L'option \fBSA_RESETHAND\fP est compatible avec l'option SVr4 du même nom. .PP Le drapeau \fBSA_NODEFER\fP est compatible avec le drapeau SVr4 du même nom pour les noyaux\ 1.3.9 et ultérieurs. Pour les noyaux plus anciens, Linux autorisera la réception de tous les signaux et pas seulement celui qu'on est en train de mettre en place (écrasant de fait \fIsa_mask\fP). .SH NOTES Un enfant créé par \fBfork\fP(2) hérite d'une copie des actions des signaux de son parent. Lors d'un \fBexecve\fP(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. .PP Comme spécifié par POSIX, le comportement d'un processus est indéfini après la réception d'un signal \fBSIGFPE\fP, \fBSIGILL\fP, ou \fBSIGSEGV\fP qui n'a pas été engendré par une fonction \fBkill\fP(2) ou \fBraise\fP(3). La division entière par zéro a un résultat indéfini, sur certaines architectures elle déclenche un signal \fBSIGFPE\fP. De même, diviser l'entier le plus négatif par \-1 peut déclencher \fBSIGFPE\fP. .PP \fBsigaction\fP() peut être appelé avec un second argument NULL pour obtenir le gestionnaire de signaux actuel. On peut aussi vérifier si un signal est valide sur la machine actuelle en l'appelant avec les deuxième et troisième arguments qui valent NULL. .PP Il est impossible de bloquer \fBSIGKILL\fP or \fBSIGSTOP\fP (en les indiquant dans \fIsa_mask\fP). Les tentatives seront ignorées silencieusement. .PP Consultez \fBsigsetops\fP(3) pour les détails concernant les ensembles de signaux. .PP .\" Consultez \fBsignal\-safety\fP(7) pour une liste de fonctions sûres pour les signaux asynchrones qui peuvent être appelées dans un gestionnaire de signal. .SS "Non documenté" Avant l'introduction de l'attribut \fBSA_SIGINFO\fP il était déjà possible d'obtenir des informations supplémentaires sur un signal. Cela se faisait en fournissant au gestionnaire de signal \fIsa_handler\fP un second paramètre de type \fIstruct sigcontext\fP, qui est la même structure que celle fournie dans le champ \fIuc_mcontext\fP de la structure \fIucontext\fP passée (à l'aide d'un pointeur) comme troisième paramètre du gestionnaire \fIsa_sigaction\fP Consultez les sources du noyau Linux pertinentes pour des détails. Cette utilisation est désormais obsolète. .SH BOGUES Au moment où un signal est délivré avec le gestionnaire \fBSA_SIGINFO\fP, le noyau ne fournit pas toujours des valeurs significatives pour tous les champs de \fIsiginfo_t\fP cohérentes pour ce signal. .PP .\" commit 69be8f189653cd81aae5a74e26615b12871bb72e Jusqu'à Linux\ 2.6.13 inclus, indiquer \fBSA_NODEFER\fP dans \fIsa_flags\fP empêchait non seulement le signal reçu d'être masqué pendant l'exécution du gestionnaire, mais empêchait également les signaux de \fIsa_mask\fP d'être masqués. Ce bogue a été corrigé dans Linux\ 2.6.14. .SH EXEMPLES Consultez \fBmprotect\fP(2). .SS "Sondage de la prise en charge d'un drapeau" Le programme d'exemple suivant quitte avec l'état \fBEXIT_SUCCESS\fP si \fBSA_EXPOSE_TAGBITS\fP a vocation à être pris en charge, ou sinon \fBEXIT_FAILURE\fP. .PP .\" SRC BEGIN (sigaction.c) .EX #include #include #include #include \& void handler(int signo, siginfo_t *info, void *context) { struct sigaction oldact; \& if (sigaction(SIGSEGV, NULL, &oldact) == \-1 || (oldact.sa_flags & SA_UNSUPPORTED) || !(oldact.sa_flags & SA_EXPOSE_TAGBITS)) { _exit(EXIT_FAILURE); } _exit(EXIT_SUCCESS); } \& int main(void) { struct sigaction act = { 0 }; \& act.sa_flags = SA_SIGINFO | SA_UNSUPPORTED | SA_EXPOSE_TAGBITS; act.sa_sigaction = &handler; if (sigaction(SIGSEGV, &act, NULL) == \-1) { perror("sigaction"); exit(EXIT_FAILURE); } \& raise(SIGSEGV); } .EE .\" SRC END .SH "VOIR AUSSI" \fBkill\fP(1), \fBkill\fP(2), \fBpause\fP(2), \fBpidfd_send_signal\fP(2), \fBrestart_syscall\fP(2), \fBseccomp\fP(2), \fBsigaltstack\fP(2), \fBsignal\fP(2), \fBsignalfd\fP(2), \fBsigpending\fP(2), \fBsigprocmask\fP(2), \fBsigreturn\fP(2), \fBsigsuspend\fP(2), \fBwait\fP(2), \fBkillpg\fP(3), \fBraise\fP(3), \fBsiginterrupt\fP(3), \fBsigqueue\fP(3), \fBsigsetops\fP(3), \fBsigvec\fP(3), \fBcore\fP(5), \fBsignal\fP(7) .PP .SH TRADUCTION La traduction française de cette page de manuel a été créée par Christophe Blaess , Stéphan Rafin , Thierry Vignaud , François Micaux, Alain Portal , Jean-Philippe Guérard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas François , Florentin Duneau , Simon Paillard , Denis Barbier , David Prévot , Cédric Boutillier , Frédéric Hantrais et Jean-Philippe MENGUAL . .PP Cette traduction est une documentation libre ; veuillez vous reporter à la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE. .PP Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à .MT debian-l10n-french@lists.debian.org .ME .