Formation PUB110 : Linux, 2018 Les signaux IPC (inter-process communication)

7.1 Qu'est-ce qu'un signal IPC?


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.

Générer un signal IPC par programmation

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.

Terminal

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.

Python

import signal

signal.raise_signal(signal.SIGINT)   # simule les touches Ctrl+C
signal.alarm(4)   # envoie le signal SIGALRM dans 4 secondes

Générer un signale IPC au clavier

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.

Programme qui intercepte un signal

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.

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.

Python

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
...

Pour plus d'information

« 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é

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre