Les signaux IPC (Inter-Process Communication) sont un mécanisme par lequel un processus ou un programme peut recevoir de l'information en provenance du système d'exploitation.
Il existe une action par défaut associée à chacun des signaux, par exemple terminer le programme de façon abrupte sur réception d'un signal SIGKILL.
Ces signaux peuvent être générés par programmation ou à l'aide de combinaisons de touches au clavier.
Pour générer un signal par programmation, il est possible d'utiliser la commande Linux kill.
kill -SIGSTOP numero-processus
kill -SIGCONT numero-processus
Un signal peut également être lancé par un programme Python à l'aide de la bibliothèque signal.
import signal
signal.raise_signal(signal.SIGINT) # simule les touches Ctrl+C
signal.alarm(4) # envoie le signal SIGALRM dans 4 secondes
Pour générer un signal au clavier, il faut se placer dans la fenêtre Terminal où le processus a été lancé.
Le signal sera lancé en appuyant sur les touches correspondantes , par exemple Ctrl + C pour le signal SIGINT qui terminera le programme de façon douce.
Certains signaux peuvent être interceptés par le programme afin qu'il réagisse selon son besoin, par exemple en effectuant des tâches de nettoyage, en envoyant un message à la console, etc.
Voici un exemple d'interception du signal SIGINT en Python.
try:
...
except KeyboardInterrupt:
print('Fin du programme, vous avez appuyé sur Ctrl+C.')
La bibliothèque Python signal permet d'intercepter d'autres signaux.
import signal
def signal_handler(numero_signal, frame):
print('Signal reçu : ', numero_signal, ' Frame : ', frame)
signal.signal(signal.SIGALRM, signal_handler) # associe le signal SIGALRM à un gestionnaire
...
« Python Signal Module – What are Signals and How to Create Them? ». Ask Python. https://www.askpython.com/python-modules/python-signal
« Termination Signals ». GNU. https://www.gnu.org/software/libc/manual/html_node/Termination-Signals.html
« Signal (IPC) ». Wikipedia. https://en.wikipedia.org/wiki/Signal_(IPC)
« What is the difference between the SIGINT and SIGTERM signals in Linux? What’s the difference between the SIGKILL and SIGSTOP signals? ». Quora. https://www.quora.com/What-is-the-difference-between-the-SIGINT-and-SIGTERM-signals-in-Linux-What%E2%80%99s-the-difference-between-the-SIGKILL-and-SIGSTOP-signals
▼Publicité