Si vous intéressez au fonctionnement des processus sous UNIX ou Linux, vous allez tôt ou tard confrontez aux signaux généralement au travers de la commande Kill.
Les signaux sont des interruptions que l’on peut envoyer à un processus pour informer d’un évènement.
Dans ce tutoriel, je vous donne une définition des signaux UNIX/Linux, la liste des signaux et comment envoyer un signal à un processus.
Table des matières
Qu’est-ce qu’un signal dans UNIX ou Linux
Les signaux sont des notifications diverses envoyées à un processus afin de l’informer de divers événements “importants”. De par leur nature, ils interrompent ce que le processus est en train de faire, et l’obligent à les traiter immédiatement. Chaque signal possède un nombre entier qui le représente (1, 2, etc.), ainsi qu’un nom symbolique qui est généralement défini dans le fichier /usr/include/signal.h ou dans l’un des fichiers inclus par celui-ci directement ou indirectement (HUP, INT, etc.).
Utilisez la commande “kill -l” pour obtenir la liste des signaux pris en charge par votre système).
Chaque signal peut avoir un gestionnaire de signal, qui est une fonction appelée lorsque le processus reçoit ce signal. La fonction est appelée en “mode asynchrone”, ce qui signifie qu’aucun code de votre programme n’appelle directement cette fonction. Au lieu de cela, lorsque le signal est envoyé au processus, le système d’exploitation arrête l’exécution du processus et le “force” à appeler la fonction de gestion du signal. Lorsque la fonction de gestion du signal revient, le processus poursuit son exécution là où il se trouvait avant la réception du signal, comme si l’interruption n’avait jamais eu lieu.
En quelques sortes, le signal visant un processus fonctionne comme une interruption (IRQ) pour le matériel.
Le signal n’est rien d’autre qu’une interruption dans l’exécution du processus. Un processus peut se signaler lui-même ou provoquer le passage d’un signal à un autre processus.
Ces interruptions (signaux) peuvent provenir de diverses sources, par exemple des erreurs matérielles telles que l’accès à des adresses mauvaises ou mal alignées, la mort d’un processus enfant, les signaux générés par l’utilisateur à l’aide de la commande kill, ou à partir d’autres processus utilisant un appel système.
Quelle est la liste des signaux UNIX et Linux
Nom du Signal | Numéro du Signal | Description |
---|---|---|
SIGHUP | 1 | Raccrochage détecté sur le terminal de contrôle ou mort du processus de contrôle. Il intervient à la perte ou fermeture du terminal : tout programme démarré dans un terminal donné recevra un SIGHUP lorsque le terminal sera fermé. L’autre possibilité est que quelque chose envoie délibérément à votre processus un SIGHUP qui, par “tradition”, est souvent utilisé pour signaler à un processus qu’il doit relire sa configuration. |
SIGINT | 2 | Émise si l’utilisateur envoie un signal d’interruption (Ctrl + C). Le comportement par défaut est de mettre fin au processus, mais il peut être rattrapé ou ignoré. L’intention est de fournir un mécanisme pour un arrêt ordonné et gracieux. |
SIGQUIT | 3 | Émis si l’utilisateur envoie un signal de sortie (Ctrl + D). Le comportement par défaut est de mettre fin au processus et de vider le noyau, mais il peut être rattrapé ou ignoré. L’intention est de fournir un mécanisme permettant à l’utilisateur d’interrompre le processus. Vous pouvez considérer SIGINT comme un “arrêt heureux initié par l’utilisateur” et SIGQUIT comme un “arrêt malheureux initié par l’utilisateur”. |
SIGFPE | 8 | Émis si une opération mathématique illégale est tentée. |
SIGKILL | 9 | Si un processus reçoit ce signal, il doit s’arrêter immédiatement et n’effectuera aucune opération de nettoyage. |
SIGALRM | 14 | Signal d’alarme (utilisé pour les minuteries). |
SIGTERM | 15 | Signal de fin de logiciel. Le comportement par défaut est de mettre fin au processus, mais il peut également être pris en charge ou ignoré. L’intention est de tuer le processus, gracieusement ou non, mais de lui donner d’abord une chance de se nettoyer. |
SIGSTOP | 19 | Mettre le processus en pause ; le signal ne peut pas être capté ou ignoré. L’interpréteur de commandes utilise la pause (et son équivalent, la reprise via SIGCONT) pour mettre en œuvre le contrôle des tâches. |
Vous obtenir très facilement la liste des signaux avec la commande kill :
kill -l
Wikipedia fournit aussi une liste plus complète.
Comment envoyer un signal à un processus
Pour envoyer un signal à un processus, il faut utiliser la commande kill.
La syntaxe est la suivante où signal est le nom ou le numéro du signal.
kill -<signal< <pid>
Ici, signal est le numéro ou le nom du signal à délivrer et PID est l’ID du processus auquel le signal doit être envoyé. Par exemple –
kill -1 2001
La commande équivalente est :
kill -SIGHUP 2001
La commande ci-dessus envoie le signal HUP ou de raccrochage au programme qui s’exécute avec l’ID de processus 2001. Pour envoyer un signal kill au même processus, utilisez la commande suivante –
kill -9 2001
Cette commande tue le processus qui s’exécute avec l’ID de processus 2001.
Liens
- Commande PS : lister les processus sur Linux
- Linux : exécuter des commandes en arrière-plan
- Commande Nohup sur Linux : utilisations et exemples
- Commande jobs, fg et bg sur Linux : utilisations et exemples
- Top : lister les processus sur Linux
- Utiliser la commande Kill, Killall, pkill pour arrêter un processus sur Linux
- Comment utiliser les commandes nice et renice sur Linux pour définir des priorités de processus
- Comment trouver et tuer un processus Zombie sur Linux (Defunct)
- 6 exemples d’utilisation de la commande Kill sur Linux
- Qu’est-ce que le load average sur Linux
- Mesurer le débit et lister les connexions réseaux sur Linux
- La mémoire sur Linux : comment ça marche
- PID (Process IDentifier) : l’identifiant des processus
- VMStat : Mesures de performance Linux