Sous Linux, un signal est une interruption logicielle envoyée à un processus pour l'informer qu'un événement important s'est produit. Comprendre les signaux linux est fondamental pour gérer efficacement les processus et le comportement du système.
L'Objectif des Signaux
Les signaux servent de méthode principale pour la communication inter-processus (IPC). Ils ont de nombreuses utilisations :
- Interaction Utilisateur : Un utilisateur peut taper des caractères de terminal spéciaux, comme
Ctrl-C(SIGINT) ouCtrl-Z(SIGTSTP), pour interrompre ou suspendre les processus au premier plan. - Notifications du Noyau : Le noyau peut envoyer des signaux à un processus pour l'informer de problèmes matériels ou logiciels, tels qu'un accès mémoire illégal (SIGSEGV).
- Gestion des Processus : Les administrateurs système et d'autres processus utilisent des signaux pour gérer le cycle de vie d'autres processus, comme demander une terminaison ou un rechargement de configuration.
Le Cycle de Vie des Signaux
Lorsqu'un événement génère un signal, il est d'abord délivré à un processus cible. Le signal reste dans un état "en attente" jusqu'à ce que le noyau exécute le processus. Lorsque le processus est planifié, le signal est délivré. Cependant, les processus ont des masques de signaux, qui peuvent être configurés pour bloquer la délivrance de signaux spécifiques.
Lorsqu'un signal est délivré, le processus peut prendre l'une des actions suivantes :
- Ignorer le signal : Le processus écarte simplement le signal et continue son exécution.
- Intercepter le signal : Le processus exécute une fonction personnalisée appelée gestionnaire de signal pour répondre à l'événement.
- Exécuter l'action par défaut : S'il n'est ni intercepté ni ignoré, l'action par défaut est effectuée. Pour de nombreux signaux, cela signifie terminer le processus.
- Bloquer le signal : Si le signal est dans le masque de signaux du processus, il reste en attente jusqu'à ce qu'il soit débloqué.
Signaux de Processus Linux Courants
Chaque signal est défini par un entier, mais ils sont presque toujours désignés par leurs noms symboliques (le code sig os), qui commencent par SIG. Bien que les nombres puissent varier légèrement selon les architectures, les noms sont cohérents. Voici quelques-uns des signaux de processus linux les plus courants :
- SIGHUP (1) : Raccrochage (Hangup). Souvent utilisé pour demander à un démon de recharger sa configuration.
- SIGINT (2) : Interruption. Envoyé par
Ctrl-C. C'est une demande de terminaison du processus. - SIGKILL (9) : Tuer (Kill). C'est une terminaison immédiate et forcée. Le processus ne peut pas intercepter, ignorer ou bloquer ce signal.
- SIGSEGV (11) : Erreur de Segmentation. Indique que le processus a effectué une référence mémoire invalide.
- SIGTERM (15) : Terminaison. C'est la manière standard et polie de demander à un processus de se terminer. C'est le signal par défaut envoyé par la commande
kill. Un processus peut intercepter ce signal pour effectuer un nettoyage avant de s'arrêter. On l'appelle souvent signal 15 linux. - SIGSTOP : Arrêt. Met le processus en pause. Comme SIGKILL, il ne peut être ni intercepté ni ignoré.
La différence clé entre SIGTERM (signal linux 15) et SIGKILL est que SIGTERM est une requête qui peut être gérée, tandis que SIGKILL est une commande qui détruit le processus immédiatement.