Linux supporte à la fois les signaux fiables POSIX (ci-après "signaux standard") et les signaux POSIX en temps réel.
Signaux Standard
Linux supporte les signaux standard listés ci-dessous. Plusieurs numéros de signal dépendent de l'architecture, comme indiqué dans la colonne "Valeur". (Lorsque trois valeurs sont données, la première est généralement valable pour alpha et sparc, la moyenne pour i386, ppc et sh et la dernière pour mips.
A - indique qu'un signal est absent sur l'architecture correspondante.)
Les entrées de la colonne "Action" du tableau spécifient l'action par défaut pour le signal, comme suit:
Terme
L'action par défaut consiste à terminer le processus.
Ign
L'action par défaut consiste à ignorer le signal.
Coeur
L'action par défaut consiste à terminer le processus et à vider le noyau.
Arrêtez
L'action par défaut consiste à arrêter le processus.
Tout d’abord, les signaux décrits dans la norme POSIX.1 d’origine.
Signal | Valeur | action | Commentaire |
ou la mort du processus de contrôle | |||
SIGINT | 2 | Terme | Interruption du clavier |
SIGQUIT | 3 | Coeur | Quitter du clavier |
SIGILL | 4 | Coeur | Instruction illégale |
SIGABRT | 6 | Coeur | Abandonner le signal de avorter (3) |
SIGFPE | 8 | Coeur | Exception en virgule flottante |
SIGKILL | 9 | Terme | Tuer le signal |
SIGSEGV | 11 | Coeur | Référence mémoire invalide |
SIGPIPE | 13 | Terme | Pipe cassée: écrivez dans la pipe sans lecteur |
SIGALRM | 14 | Terme | Signal de minuterie de alarme (2) |
SIGTERM | 15 | Terme | Signal de terminaison |
SIGUSR1 | 30,10,16 | Terme | Signal défini par l'utilisateur 1 |
SIGUSR2 | 31,12,17 | Terme | Signal défini par l'utilisateur 2 |
SIGCHLD | 20,17,18 | Ign | Enfant arrêté ou terminé |
SIGCONT | 19,18,25 | Continuer si arrêté | |
SIGSTOP | 17,19,23 | Arrêtez | Arrêter le processus |
SIGTSTP | 18,20,24 | Arrêtez | Arrête de taper au tty |
SIGTTIN | 21,21,26 | Arrêtez | entrée tty pour le processus d'arrière-plan |
SIGTTOU | 22,22,27 | Arrêtez | sortie tty pour le traitement en arrière-plan |
Les signauxSIGKILL etSIGSTOP ne peut pas être attrapé, bloqué ou ignoré.
Ensuite, les signaux ne sont pas dans la norme POSIX.1 mais décrits dans SUSv2 et SUSv3 / POSIX 1003.1-2001.
Signal | Valeur | action | Commentaire |
SIGPOLL | Terme | Evénement pollable (Sys V). Synonyme de SIGIO | |
SIGPROF | 27,27,29 | Terme | Profiler minuterie expiré |
SIGSYS | 12,-,12 | Coeur | Mauvais argument de routine (SVID) |
SIGTRAP | 5 | Coeur | Traçage / point d'arrêt |
SIGURG | 16,23,21 | Ign | Condition urgente sur le socket (4.2 BSD) |
SIGVTALRM | 26,26,28 | Terme | Réveil virtuel (4.2 BSD) |
SIGXCPU | 24,24,30 | Coeur | Limite de temps CPU dépassée (4.2 BSD) |
SIGXFSZ | 25,25,31 | Coeur | Limite de taille de fichier dépassée (4.2 BSD) |
Jusqu’à Linux 2.2 inclus, le comportement par défaut pourSIGSYS, SIGXCPU, SIGXFSZ, et (sur les architectures autres que SPARC et MIPS)SIGBUS était de mettre fin au processus (sans vidage de mémoire). (Sur d’autres Unices, l’action par défaut pourSIGXCPU etSIGXFSZ Pour terminer le processus sans vidage principal.) Linux 2.4 est conforme aux exigences POSIX 1003.1-2001 pour ces signaux et termine le processus par un vidage principal.
Suivant divers autres signaux.
Signal | Valeur | action | Commentaire |
SIGEMT | 7,-,7 | Terme | |
SIGSTKFLT | -,16,- | Terme | Défaut de pile sur le coprocesseur (non utilisé) |
SIGIO | 23,29,22 | Terme | E / S maintenant possible (4.2 BSD) |
SIGCLD | -,-,18 | Ign | Un synonyme de SIGCHLD |
SIGPWR | 29,30,19 | Terme | Panne de courant (System V) |
SIGINFO | 29,-,- | Un synonyme de SIGPWR | |
SIGLOST | -,-,- | Terme | Verrouillage de fichier perdu |
SIGWINCH | 28,28,20 | Ign | Signal de redimensionnement de la fenêtre (4.3 BSD, Sun) |
Sigunus | -,31,- | Terme | Signal non utilisé (sera SIGSYS) |
(Le signal 29 estSIGINFO / SIGPWR sur un alpha maisSIGLOST sur un sparc.)
SIGEMT n’est pas spécifié dans POSIX 1003.1-2001, mais apparaît néanmoins sur la plupart des autres Unices, où son action par défaut consiste généralement à mettre fin au processus avec un vidage principal.
SIGPWR (qui n'est pas spécifié dans POSIX 1003.1-2001) est généralement ignoré par défaut sur les autres Unices où il apparaît.
SIGIO (qui n'est pas spécifié dans POSIX 1003.1-2001) est ignoré par défaut sur plusieurs autres Unices.
Signaux en temps réel
Linux prend en charge les signaux en temps réel tels que définis à l'origine dans les extensions en temps réel POSIX.4 (et désormais inclus dans POSIX 1003.1-2001). Linux prend en charge 32 signaux en temps réel, numérotés à partir de 32 (SIGRTMIN) à 63 (SIGRTMAX). (Les programmes doivent toujours se référer aux signaux en temps réel en utilisant la notationSIGRTMIN+ n, car la plage de numéros de signaux en temps réel varie selon les unités.)
Contrairement aux signaux standard, les signaux en temps réel n'ont pas de signification prédéfinie: l'ensemble des signaux en temps réel peut être utilisé à des fins définies par l'application. (Notez cependant que l'implémentation LinuxThreads utilise les trois premiers signaux en temps réel.)
L'action par défaut pour un signal en temps réel non géré consiste à mettre fin au processus de réception.
Les signaux en temps réel se distinguent par les éléments suivants:
- Plusieurs instances de signaux en temps réel peuvent être mises en file d'attente. En revanche, si plusieurs instances d'un signal standard sont délivrées alors que ce signal est actuellement bloqué, une seule instance est mise en file d'attente.
- Si le signal est envoyé en utilisantsigqueue(2), une valeur associée (un entier ou un pointeur) peut être envoyée avec le signal. Si le processus de réception établit un gestionnaire pour ce signal en utilisant leSA_SIGACTION drapeau àsigaction(2) il peut ensuite obtenir ces données via le si_value domaine de la siginfo_t structure passée en tant que deuxième argument au gestionnaire. En outre, le si_pid et si_uid Les champs de cette structure peuvent être utilisés pour obtenir le PID et l'ID utilisateur réel du processus qui envoie le signal.
- Les signaux en temps réel sont livrés dans un ordre garanti. Plusieurs signaux en temps réel du même type sont livrés dans l'ordre dans lequel ils ont été envoyés. Si différents signaux en temps réel sont envoyés à un processus, ils sont livrés en commençant par le signal le plus petit. (C'est-à-dire que les signaux de petit nombre ont la priorité la plus haute.)
Si des signaux standard et en temps réel sont en attente pour un processus, POSIX laisse indéterminé le premier élément à livrer. Linux, comme beaucoup d’autres implémentations, donne la priorité aux signaux standard dans ce cas.
Selon POSIX, une implémentation devrait permettre au moins _POSIX_SIGQUEUE_MAX (32) signaux en temps réel d'être mis en file d'attente dans un processus. Cependant, plutôt que de définir une limite par processus, Linux impose une limite au système pour le nombre de signaux en temps réel mis en file d'attente pour tous les processus.
Cette limite peut être vue (et avec privilège) modifiée via le / proc / sys / kernel / rtsig-max fichier. Un fichier associé, / proc / sys / kernel / rtsig-max , peut être utilisé pour savoir combien de signaux en temps réel sont actuellement en file d'attente.
SE CONFORMER À
POSIX.1
Important: Utilisez le homme commande ( % homme ) pour voir comment une commande est utilisée sur votre ordinateur.