Man page - signal(7)
Packages contains this manual
- shm_overview(7)
- nss(5)
- proc_mtrr(5)
- intro(7)
- tcp(7)
- iso_8859-9(7)
- armscii-8(7)
- proc_kpagecount(5)
- initrd(4)
- mouse(4)
- proc_stat(5)
- x25(7)
- proc_interrupts(5)
- fifo(7)
- repertoiremap(5)
- icmp(7)
- futex(7)
- feature_test_macros(7)
- lp(4)
- bpf-helpers(7)
- epoll(7)
- proc_sys_dev(5)
- namespaces(7)
- proc_sysrq-trigger(5)
- proc_bus(5)
- cp1251(7)
- proc_pid_maps(5)
- proc_sys_vm(5)
- proc_pid_projid_map(5)
- st(4)
- proc_pid(5)
- issue(5)
- pid_namespaces(7)
- unicode(7)
- inode(7)
- hosts.equiv(5)
- iso-8859-13(7)
- proc_fb(5)
- proc_modules(5)
- proc_pid_autogroup(5)
- keyrings(7)
- sysvipc(7)
- proc_kmsg(5)
- cgroups(7)
- latin6(7)
- proc_pid_uid_map(5)
- unix(7)
- proc_pid_io(5)
- pts(4)
- packet(7)
- ld-linux.so(8)
- tzselect(8)
- iconv(1)
- proc_pid_syscall(5)
- proc_pid_net(5)
- proc_pid_pagemap(5)
- tty(4)
- proc_profile(5)
- standards(7)
- proc_pid_mounts(5)
- filesystems(5)
- iso-8859-15(7)
- locale(5)
- iso_8859_3(7)
- xattr(7)
- iso-8859-2(7)
- proc_uptime(5)
- persistent-keyring(7)
- credentials(7)
- proc_pid_timers(5)
- utmpx(5)
- vcsa(4)
- proc_pid_exe(5)
- proc_net(5)
- proc_timer_stats(5)
- ip(7)
- proc_pid_fd(5)
- ptmx(4)
- user_namespaces(7)
- resolv.conf(5)
- url(7)
- iso_8859_5(7)
- iso_8859-8(7)
- urn(7)
- process-keyring(7)
- proc_pid_auxv(5)
- proc_ksyms(5)
- proc_ide(5)
- veth(4)
- ldd(1)
- proc_swaps(5)
- landlock(7)
- proc_vmstat(5)
- system_data_types(7)
- cp1252(7)
- lirc(4)
- proc_kpageflags(5)
- random(7)
- precedence(7)
- cpuset(7)
- proc_pid_ns(5)
- acct(5)
- latin4(7)
- proc_pid_cgroup(5)
- proc_cpuinfo(5)
- iso_8859-2(7)
- proc_keys(5)
- charsets(7)
- pldd(1)
- proc_pid_stat(5)
- rtnetlink(7)
- netlink(7)
- ram(4)
- mem(4)
- iso-8859-6(7)
- proc_key-users(5)
- iso_8859_15(7)
- fanotify(7)
- proc_sys_net(5)
- sysfs(5)
- math_error(7)
- latin1(7)
- proc_pid_root(5)
- nptl(7)
- proc_cgroups(5)
- proc_iomem(5)
- proc_pid_statm(5)
- sem_overview(7)
- hier(7)
- full(4)
- proc_pid_status(5)
- proc_pid_cwd(5)
- proc_pid_cpuset(5)
- proc_scsi(5)
- uri(7)
- proc_diskstats(5)
- iso_8859_6(7)
- latin2(7)
- latin5(7)
- man-pages(7)
- ld.so(8)
- uts_namespaces(7)
- proc_pid_mountstats(5)
- intro(3)
- proc_pid_seccomp(5)
- proc_pid_wchan(5)
- attributes(7)
- symlink(7)
- mount_namespaces(7)
- charmap(5)
- tis-620(7)
- iso-8859-10(7)
- getent(1)
- proc_buddyinfo(5)
- ttytype(5)
- rtc(4)
- proc_malloc(5)
- suffixes(7)
- sln(8)
- signal(7)
- proc_sys_abi(5)
- signal-safety(7)
- time_namespaces(7)
- proc_pid_comm(5)
- raw(7)
- gai.conf(5)
- proc_crypto(5)
- locale(1)
- iso-8859-3(7)
- motd(5)
- proc_meminfo(5)
- iso-8859-8(7)
- protocols(5)
- proc_pid_map_files(5)
- pthreads(7)
- null(4)
- proc(5)
- zdump(8)
- socket(7)
- proc_sys_kernel(5)
- ddp(7)
- memusagestat(1)
- hd(4)
- iso-8859-14(7)
- shells(5)
- pipe(7)
- glob(7)
- proc_self(5)
- network_namespaces(7)
- utmp(5)
- proc_kcore(5)
- nsswitch.conf(5)
- sd(4)
- iso-8859-5(7)
- iso_8859_16(7)
- man(7)
- iso_8859-6(7)
- dir_colors(5)
- mq_overview(7)
- vsock(7)
- ascii(7)
- thread-keyring(7)
- fs(5)
- proc_pid_attr(5)
- proc_sys_debug(5)
- proc_sys(5)
- proc_pid_cmdline(5)
- pty(7)
- services(5)
- cgroup_namespaces(7)
- securetty(5)
- netdevice(7)
- iso_8859_13(7)
- host.conf(5)
- proc_pid_setgroups(5)
- proc_slabinfo(5)
- sock_diag(7)
- iso_8859-14(7)
- iso-8859-11(7)
- iso_8859_11(7)
- operator(7)
- regex(7)
- wavelan(4)
- proc_sys_fs(5)
- nologin(5)
- proc_pci(5)
- koi8-r(7)
- erofs(5)
- intro(2)
- utf8(7)
- proc_kallsyms(5)
- proc_sysvipc(5)
- queue(7)
- proc_sys_sunrpc(5)
- intro(5)
- latin8(7)
- mtrace(1)
- ipc_namespaces(7)
- dsp56k(4)
- iso_8859_4(7)
- proc_pid_smaps(5)
- proc_cmdline(5)
- rpc(5)
- proc_tty(5)
- proc_version(5)
- smartpqi(4)
- proc_pid_timerslack_ns(5)
- aio(7)
- session-keyring(7)
- resolver(5)
- slabinfo(5)
- wtmp(5)
- iso_8859_9(7)
- proc_locks(5)
- mailaddr(7)
- proc_pid_oom_score(5)
- kmem(4)
- iconvconfig(8)
- iso_8859-7(7)
- glibc(7)
- hostname(7)
- proc_thread-self(5)
- ipv6(7)
- iso_8859_7(7)
- proc_kpagecgroup(5)
- core(5)
- time(7)
- units(7)
- proc_dma(5)
- loop(4)
- address_families(7)
- zero(4)
- intro(4)
- procfs(5)
- iso_8859-4(7)
- vdso(7)
- tmpfs(5)
- iso-8859-16(7)
- iso_8859_10(7)
- user-session-keyring(7)
- libc(7)
- proc_fs(5)
- koi8-u(7)
- latin3(7)
- proc_tid_children(5)
- proc_pid_limits(5)
- proc_pid_coredump_filter(5)
- iso_8859-15(7)
- arp(7)
- urandom(4)
- iso_8859-10(7)
- hpsa(4)
- proc_pid_environ(5)
- boot(7)
- ftm(7)
- ld-linux(8)
- proc_driver(5)
- loop-control(4)
- iso_8859-16(7)
- proc_filesystems(5)
- tzfile(5)
- sprof(1)
- proc_pid_task(5)
- proc_pid_oom_score_adj(5)
- proc_mounts(5)
- iso-8859-4(7)
- iso_8859-1(7)
- utf-8(7)
- iso_8859-13(7)
- intro(6)
- proc_timer_list(5)
- rtld-audit(7)
- iso_8859-3(7)
- group(5)
- sched(7)
- proc_pid_clear_refs(5)
- hosts(5)
- iso_8859-11(7)
- numa(7)
- iso_8859_2(7)
- locale(7)
- iso-8859-1(7)
- fuse(4)
- proc_tid(5)
- proc_execdomains(5)
- proc_pid_mountinfo(5)
- intro(8)
- iso_8859_8(7)
- proc_loadavg(5)
- proc_pid_oom_adj(5)
- re_format(7)
- iso_8859_14(7)
- zic(8)
- bootparam(7)
- inotify(7)
- posixoptions(7)
- proc_partitions(5)
- iso-8859-9(7)
- proc_pid_mem(5)
- networks(5)
- proc_sys_user(5)
- udp(7)
- proc_zoneinfo(5)
- latin10(7)
- proc_pid_fdinfo(5)
- proc_pid_stack(5)
- memusage(1)
- spufs(7)
- pkeys(7)
- path_resolution(7)
- proc_ioports(5)
- intro(1)
- ldconfig(8)
- msr(4)
- svipc(7)
- port(4)
- proc_pid_personality(5)
- cciss(4)
- latin9(7)
- capabilities(7)
- localedef(1)
- vcs(4)
- iso_8859-5(7)
- elf(5)
- proc_sys_proc(5)
- console_codes(4)
- random(4)
- iso-8859-7(7)
- termcap(5)
- cpuid(4)
- environ(7)
- string_copying(7)
- proc_pid_gid_map(5)
- queue(3)
- termio(7)
- user-keyring(7)
- complex(7)
- latin7(7)
- proc_config.gz(5)
- udplite(7)
- kernel_lockdown(7)
- proc_devices(5)
- proc_apm(5)
- iso_8859_1(7)
- proc_pid_numa_maps(5)
apt-get install manpages
Available languages:
en fr it pl cs ja ru zh_TW zh_CN deManual
signal
NOMDESCRIPTION
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.
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.
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 :
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 .