Un signal est un message envoyé à un processus. Le corps du message est en fait très simple puisqu'il est constitué en tout et pour tout d'un entier indiquant le type du signal. Typiquement, l'arrivée d'un signal interrompt, plus ou moins brutalement l'exécution du processus qui le reçoit. Les signaux systèmes jouent au niveau des processus le rôle que les exceptions et les interruptions jouent au niveau du processeur. Ainsi, un signal agit comme une "sonnerie" qui avertit un processus d'un événement synchrone (propre à la programmation) ou asynchrone (extérieur au programme).
La norme POSIX définit plusieurs signaux qui peuvent être utilisés pour agir sur les processus, on va en voir certains, nécessaires en cas de DOS en cours, par exemple. On transmet les signaux avec la commande kill, dont la syntaxe est :
# kill numero_signal numero_process_a_tuer
On peut voir la liste des signaux disponibles avec la commande suivante :
# kill -l
Voilà la liste des principaux signaux disponibles et utiles sous Gnu/Linux :
| Nom | Entier correspondant | Action par défaut | Non interceptable | Non ignorable | Description |
|---|---|---|---|---|---|
| SIGHUP | 1 | terminer le processus | Envoyé par un shell à tous les processus qui en dépendent pour prévenir de sa terminaison. Peut permettre de redémarrer certains processus. | ||
| SIGINT | 2 | terminer le processus | Signal d'interruption, envoyé par exemple par la combinaison de touches Control-C. | ||
| SIGQUIT | 3 | terminer le processus | Signal de terminaison d'un processus (Control-\). Signal par défaut utilisé par la commande kill et ses dérivés, terminaison rapide du processus auquel il est envoyé.. | ||
| SIGILL | 4 | terminer le processus | Emis en cas d'instruction illégale. | ||
| SIGTRAP | 5 | créer un fichier core | Emis après chaque exécution d'une instruction par un processus donné, ou en cas de rencontre d'un point d'arrêt prévu, à fin de déboggage. | ||
| SIGIOT | 6 | créer un fichier core | Erreur matérielle. | ||
| SIGFPE | 8 | créer un fichier core | Erreur mathématique (division par zéro par exemple). | ||
| SIGKILL | 9 | terminer le processus | X | X | Tue un processus, quel que soit sont état, de manière inconditionnelle. A utiliser en cas d'urgence, mais le processus se terminera pas correctement, et donc laissera des traces (non libération de certaines ressources, mémoire, disque, ...). |
| SIGSEGV | 11 | créer un fichier core | Erreur de segmentation. | ||
| SIGSYS | 12 | - | Erreur de paramètre lors d'un appel système. | ||
| SIGPIPE | 13 | terminer le processus | Erreur concernant un tube ("pipe") système (par exemple, écriture sans qu'un autre processus lise la sortie). | ||
| SIGALRM | 14 | terminer le processus | Signal associé à une horloge (synchronisation, ...). | ||
| SIGTERM | 15 | terminer le processus | X | X | Terminaison normale d'un processus, donc propre (ressources correctement relachées). |
| SIGSTOP | 17 | arrêter le processus | X | X | Signal de pause immédiate du processus (en l'état). Correspond à la combinaison de touches Control-S. |
| SIGCONT | 18, 19, 25 | arrêter le processus | Continuer le processus s'il est arrêté. |
A la réception d'un signal, un programme peut avoir trois actions :
# fgPour le faire redémarrer en arrière plan :
# bg