Comment envoyer et attraper SIGTERM dans Bash et Python

Comment Envoyer Et Attraper Sigterm Dans Bash Et Python



Sous Linux, les processus communiquent entre eux à l'aide de signaux. Les signaux agissent comme des interruptions logicielles qui informent les programmes de divers événements ou demandes. Par exemple, lorsqu'un programme est en cours d'exécution, vous pouvez envoyer un signal d'arrêt pour quitter le programme. Le signal envoyé peut déclencher différentes actions telles que l'arrêt d'une exécution, la fin du programme, la reprise de l'exécution, etc.

Lorsque vous travaillez avec Bash et Python, vous pouvez envoyer le signal SIGTERM pour terminer en douceur le processus en cours. Cet article couvre l'envoi et la capture de SIGTERM dans Bash et Python.

Qu'est-ce qu'un terme de signe

Les systèmes Unix ont trois catégories de signaux : système, périphérique et 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 en douceur un processus en cours d'exécution. Voici la syntaxe pour utiliser SIGTERM dans Bash :



tuer TERME CIBLE < PID >

ou

tuer - quinze < PID >

Vous pouvez vérifier tous les signaux disponibles à l'aide de la commande suivante :



tuer -l





Comment envoyer et attraper SIGTERM dans Bash et Python

Vous voudrez peut-être envoyer et intercepter SIGTERM dans Bash et Python dans différentes instances. 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 envoyez et attrapez SIGTERM dans Bash et Python.

1. Utiliser un script Python

Lorsque vous utilisez Python 1.4 et les dernières versions, vous pouvez utiliser la bibliothèque de signaux pour envoyer et intercepter SIGTERM. Importez la bibliothèque dans votre programme pour définir comment votre programme doit capturer et réagir aux différents signaux. La bibliothèque de signaux 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 les 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 avons envoyé 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 d'arrêt SIGTERM en utilisant le mot-clé SIGTERM au lieu de sa valeur entière. On obtient toujours le même résultat.

Vous pouvez également exécuter votre tâche Python en utilisant la syntaxe suivante :

python3 < scénario/travail > &

Contrairement à la première méthode, lorsque nous envoyons le SIGTERM à l'aide de cette option, nous pouvons voir que l'ID du travail est imprimé lorsque le travail commence à s'exécuter. Après l'avoir tué, nous obtenons le statut 'fait'. 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 mille fois la commande 'date' si aucun signal SIGTERM n'est envoyé.

Lors de l'exécution du script Bash, vous pouvez envoyer le signal SIGTERM en appuyant sur la Ctrl + Z touches du clavier. La commande 'trap' capture le signal transmis et la boucle 'for' s'arrête. Vous obtiendrez une sortie qui confirme que la tâche en cours a reçu un signal SIGTERM et s'est arrêtée.

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'une tâche ou d'un programme. SIGTERM est envoyé pour arrêter un programme en douceur. Pour Python, vous avez besoin d'un gestionnaire de signal pour capter un signal, et vous pouvez envoyer le SIGTERM en utilisant la commande 'kill'. Vous pouvez utiliser la commande 'trap' et les touches du clavier sur Bash pour capturer et envoyer le signal SIGTERM. Cet article a présenté différents exemples sur la façon d'y parvenir en détail.