Comment envoyer et intercepter SIGTERM en Bash et Python
Dans Linux, les processus communiquent entre eux à l'aide de signaux. Les signaux agissent comme des interruptions logicielles qui notifient les programmes de divers événements ou demandes. Par exemple, lorsqu'un programme est en cours d'exécution, vous pouvez envoyer un signal de terminaison pour quitter le programme. Le signal envoyé peut déclencher différentes actions telles que arrêter une exécution, terminer le programme, reprendre l'exécution, etc.
Lorsque vous travaillez avec Bash et Python, vous pouvez envoyer le signal SIGTERM pour terminer le processus en cours de manière douce. Cet article traite de l'envoi et de la capture du SIGTERM dans Bash et Python.
Qu'est-ce que SIGTERM
Les systèmes Unix ont trois catégories de signaux : les signaux système, les signaux de périphérique et les signaux définis par l'utilisateur. Chaque signal a une valeur entière. Vous pouvez exécuter le signal en spécifiant son nom ou sa valeur entière.
SIGTERM est un signal avec une valeur entière de 15. Il est exécuté lorsque vous souhaitez terminer un processus en cours d'exécution en douceur. Voici la syntaxe pour utiliser SIGTERM dans Bash :
kill -SIGTERM <PID>
or
kill -15 <PID>Vous pouvez vérifier tous les signaux disponibles en utilisant la commande suivante :
kill -lComment envoyer et attraper SIGTERM en Bash et Python
Vous voudrez peut-être envoyer et attraper SIGTERM dans Bash et Python dans des instances différentes. Lorsque vous exécutez votre programme Bash ou Python, vous pouvez exécuter le signal SIGTERM pour tuer le programme. Nous avons différents exemples pour comprendre comment vous envoyer et attraper SIGTERM dans Bash et Python.
1. Utiliser un script Python
Lors de l'utilisation de Python 1.4 et des versions les plus récentes, vous pouvez utiliser la bibliothèque signal pour envoyer et attraper SIGTERM. Importez la bibliothèque dans votre programme pour définir comment votre programme doit capturer et réagir à différents signaux. La bibliothèque signal vous permet de créer un gestionnaire de signaux pour signaler l'entier du signal reçu. Vous pouvez ensuite enregistrer le signal capturé et obtenir des informations sur le processus en cours, telles que son PID. Donnons un exemple.
Nous avons un script Python qui récupère l'entier du signal envoyé. De plus, il récupère le PID du processus en cours.
Dans l'image suivante, nous exécutons le script Python et avons une boucle while qui s'exécute toutes les quelques secondes. Sur un autre terminal, nous pouvons envoyer le signal SIGTERM pour tuer le processus en spécifiant le PID que nous obtenons en exécutant le script Python :
Une fois que nous envoyons le signal SIGTERM, nous remarquons que le script cesse de s'exécuter. C'est parce qu'il capture l'entier du signal. Dans ce cas, nous exécutons le kill -15 pour le signal SIGTERM. Vous pouvez également envoyer le signal de kill SIGTERM en utilisant le mot-clé SIGTERM au lieu de sa valeur entière. Nous obtenons toujours le même résultat.
Vous pouvez également exécuter votre tâche Python en utilisant la syntaxe suivante :
python3 <script/job> &Contrairement à la première méthode, lorsque nous envoyons le SIGTERM en utilisant cette option, nous pouvons voir que l'identifiant de tâche est imprimé lorsque la tâche commence à s'exécuter. Après l'avoir tuée, nous obtenons le statut « terminé ». Le SIGTERM peut être envoyé en spécifiant son nom ou son entier.
2. Utiliser un script Bash
Vous pouvez utiliser la commande « trap » pour intercepter un signal lors de l'exécution d'un script Bash. Dans cet exemple, nous avons ajouté la commande « trap » pour intercepter le signal SIGTERM. Le script est une boucle « for » pour exécuter la commande « date » mille fois si aucun signal SIGTERM n'est envoyé.
Lors de l'exécution du script Bash, vous pouvez envoyer le signal SIGTERM en appuyant sur les touches Ctrl + Z du clavier. La commande « trap » capture le signal transmis, et la boucle « for » cessera d'exécuter. Vous obtiendrez une sortie qui confirme que le travail en cours a reçu un signal SIGTERM et s'est arrêté.
C'est ainsi que vous envoyez et attrapez SIGTERM dans Bash.
Conclusion
Vous pouvez envoyer différents signaux pour atteindre différents objectifs lors de l'exécution d'un travail ou d'un programme. SIGTERM est envoyé pour arrêter un programme en douceur. Pour Python, vous avez besoin d'un gestionnaire de signaux pour attraper un signal, et vous pouvez envoyer le SIGTERM en utilisant la commande "kill". Vous pouvez utiliser la commande "trap" et des touches de clavier sur Bash pour capturer et envoyer le signal SIGTERM. Ce post a présenté différents exemples sur la façon d'y parvenir en détail.






