From 48bbc117a7bb09c4ab9328b1c4040e7a9cf171c0 Mon Sep 17 00:00:00 2001 From: iliya <iliya.saroukha@hes-so.ch> Date: Thu, 5 Oct 2023 10:53:30 +0200 Subject: [PATCH] feat: vaut mieux suivre les slides --- Makefile | 2 ++ content/04_signaux.md | 80 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 content/04_signaux.md diff --git a/Makefile b/Makefile index e2864fc..610c02e 100644 --- a/Makefile +++ b/Makefile @@ -26,3 +26,5 @@ $(TEX): $(MD) clean: rm -f *.pdf content/*.tex + +rebuild: clean all diff --git a/content/04_signaux.md b/content/04_signaux.md new file mode 100644 index 0000000..ce52564 --- /dev/null +++ b/content/04_signaux.md @@ -0,0 +1,80 @@ +--- +lang: fr +--- +\newpage + +# Signaux POSIX + +Est un événement **asynchrone** (qui peut survenir à n'importe quel moment) + +## Pourquoi les signaux + +1. Noyau notifie un processus d'un événement exceptionnel + - accès mémoire invalide, division par zéro + - terminaison de processus, etc. +2. Un processus notifie un autre processus + - forme de communication inter-processus (IPC) + - le noyau détermine si le processus est autorisé à envoyer un signal +3. Un processus se notifie lui-même + - timer + + +## Numéro et nom de signal + +Page du manuel des signaux POSIX + +```sh +man 7 signal +``` + +### Lister tous les signaux et les numéros + +```sh +kill -l +``` + +## Action d'un signal + +Un processus recevant un signal est **interrompu pour exécuter l'action** associée +au signal. + + +## Signaux impossibles à intercepter + +- `SIGKILL` +- `SIGSTP` + + +## Envoyer un signal à un processus + +```C +int kill(pid_t pid, int sig); +``` + +## États d'un signal + +Un signal peut être ignoré ou bloqué + +- ignoré $\rightarrow$ le signal est perdu +- bloqué $\rightarrow$ le signal n'est pas reçu, il le sera seulement une fois +débloqué + + +## Signaux et processus + +Chaque processus possède : + +- Une table de pointeurs où chacun pointer sur un **handler de signal** + + +## Signaux et `fork` + +- Les handlers de signaux définis dans le parent sont hérités par l'enfant +- Les signaux bloqués dans le parent sont hérités par l'enfant +- Dans l'enfant, la table des signaux pendants est initialisée à zéro +- Lorsqu'un processus se termine, le signal `SIGCHLD` est **toujours envoyé +au parent** + +Dans le cas d'un appel à une fonction `exec`, les handlers de signaux sont +ré-initialisés aux handlers par défaut + -- GitLab