WEBVTT

00:05.130 --> 00:10.170
Dans ce module, je vais donc aborder les techniques IPC appelées signaux.

00:10.320 --> 00:15.990
Dans ce module, nous verrons donc ce que sont les signaux et quels sont les différents types de signaux pris en charge

00:15.990 --> 00:17.970
par le système d'exploitation Linux.

00:18.060 --> 00:22.740
Nous verrons ensuite ce que signifie exactement la capture des signaux.

00:22.740 --> 00:27.000
Comment capturer les signaux et que faire après avoir capturé les signaux ?

00:27.810 --> 00:33.090
Enfin, nous apprendrons à utiliser les signaux comme technique de communication inter-processus.

00:34.000 --> 00:37.030
Passons donc en revue la définition formelle des signaux.

00:37.270 --> 00:43.850
Un signal est un message système envoyé d'un processus à un autre, qui n'est généralement pas utilisé pour transférer des données.

00:43.870 --> 00:51.040
Notez donc que ce point n'est généralement pas utilisé pour transférer des données, mais plutôt pour commander à distance le processus

00:51.040 --> 00:52.010
de partenariat.

00:52.030 --> 00:52.690
C'est vrai.

00:52.690 --> 00:56.080
Prenons donc un exemple pour mieux comprendre cette définition.

00:56.110 --> 01:02.570
Par exemple, dans le sport, au cricket, l'arbitre signale que le batteur est éliminé.

01:02.590 --> 01:07.030
Il s'agit donc d'un exemple de signal et non d'un transfert de données.

01:07.240 --> 01:13.990
Le deuxième exemple est le suivant : supposons que vous ayez un ami qui se trouve à deux kilomètres de vous,

01:13.990 --> 01:19.330
mais qui, à l'aide d'une torche, fait clignoter la lumière dans votre direction.

01:19.540 --> 01:22.990
Et supposons qu'il fasse nuit, n'est-ce pas ?

01:22.990 --> 01:31.120
Ainsi, le fait que votre ami fasse clignoter une lampe dans votre direction est un exemple de signal. Il vous envoie un signal

01:31.120 --> 01:38.300
et il dépend de vous de savoir comment vous voulez interpréter ce signal, quelle action vous voulez entreprendre

01:38.300 --> 01:41.660
lorsque vous recevez cette lampe de votre ami.

01:41.960 --> 01:45.220
Il s'agit donc d'un exemple concret de signal.

01:45.230 --> 01:47.830
Les signaux sont donc généralement de petits messages.

01:47.840 --> 01:50.870
Ils sont soit d'un octet, soit de deux octets.

01:50.900 --> 01:54.680
Le destinataire doit interpréter la signification d'un signal.

01:54.950 --> 01:55.760
C'est vrai.

01:56.600 --> 02:01.700
Vous pouvez donc constater que votre système entier, c'est-à-dire votre système informatique, est logiquement divisé en

02:01.700 --> 02:02.390
deux parties.

02:02.420 --> 02:07.430
Le système d'exploitation, également appelé espace noyau et espace utilisateur.

02:07.580 --> 02:11.990
Actuellement, dans l'espace utilisateur, nous exécutons toutes les applications.

02:12.080 --> 02:17.870
Par exemple, dans cet exemple, l'application 1 et l'application 2 tournent dans l'espace utilisateur,

02:17.870 --> 02:19.610
n'est-ce pas ?

02:20.210 --> 02:22.550
Qui envoie des signaux à qui ?

02:23.350 --> 02:27.730
Des signaux sont donc envoyés par le système d'exploitation à l'application.

02:27.970 --> 02:28.630
C'est vrai.

02:28.630 --> 02:34.480
Il s'agit donc d'un type de signaux envoyés par le système d'exploitation à l'application fonctionnant dans l'espace

02:34.480 --> 02:35.560
utilisateur.

02:35.650 --> 02:41.620
Des signaux sont également envoyés d'une application à une autre application, les deux applications fonctionnant dans

02:41.620 --> 02:42.820
l'espace utilisateur.

02:43.150 --> 02:43.810
C'est vrai.

02:43.810 --> 02:50.110
Mais il n'existe pas de signal envoyé par l'application fonctionnant dans l'espace utilisateur au système

02:50.110 --> 02:51.190
d'exploitation.

02:51.190 --> 02:55.170
Il n'y a pas d'exemple ou d'utilisation de signaux de ce type.

02:55.180 --> 03:00.940
Les signaux sont donc envoyés par le système d'exploitation à l'application fonctionnant dans l'espace utilisateur et les signaux

03:00.940 --> 03:06.580
sont envoyés d'une application à une autre application, les deux applications fonctionnant dans l'espace utilisateur.

03:07.830 --> 03:13.950
Le plus souvent, les signaux sont envoyés par le système d'exploitation Linux à l'application qui

03:14.760 --> 03:17.490
s'exécute dans l'espace utilisateur.

03:19.000 --> 03:25.180
Vous pouvez donc voir ici que lorsqu'un processus qui s'exécute dans l'espace utilisateur reçoit un signal du système

03:25.180 --> 03:30.220
d'exploitation, l'une ou l'autre de ces trois choses peut se produire, n'est-ce pas ?

03:30.640 --> 03:32.870
La première chose est le comportement par défaut.

03:32.890 --> 03:40.000
C'est-à-dire que lorsque le processus reçoit le signal du système d'exploitation, il exécute l'action par

03:40.000 --> 03:41.380
défaut du signal.

03:41.710 --> 03:42.370
C'est vrai ?

03:42.370 --> 03:46.560
Notez donc que chaque signal est associé à un comportement par défaut.

03:46.570 --> 03:51.970
Ainsi, lorsqu'un processus reçoit un signal, disons que le signal reçu du système d'exploitation

03:51.970 --> 03:53.050
est sigterm.

03:53.320 --> 04:01.420
L'action par défaut de ce signal est donc que l'application est censée se terminer, n'est-ce pas ?

04:01.420 --> 04:07.630
Ainsi, chaque fois qu'une application s'exécutant dans l'espace utilisateur reçoit un signal sigterm du système

04:07.630 --> 04:11.040
d'exploitation, l'application se termine par défaut.

04:11.050 --> 04:13.450
Il s'agit donc de l'action par défaut du signal.

04:15.010 --> 04:23.710
D'autre part, un processus peut se programmer pour personnaliser le traitement à la réception du signal en exécutant

04:23.740 --> 04:26.500
la routine de gestion du signal.

04:27.080 --> 04:27.650
C'est vrai.

04:27.650 --> 04:35.150
Que se passe-t-il donc dans le cas où un processus peut choisir d'effectuer sa propre action personnalisée lorsqu'il reçoit un signal

04:35.150 --> 04:37.220
du système d'exploitation ?

04:37.220 --> 04:44.180
Par exemple, lorsque le processus reçoit un signal sigterm de la part du système d'exploitation, le processus peut

04:44.180 --> 04:47.210
vouloir choisir un message d'adieu sur l'écran.

04:47.210 --> 04:48.410
Il s'agit d'un processus.

04:48.410 --> 04:52.460
Essaie d'effectuer un traitement personnalisé, n'est-ce pas ?

04:52.460 --> 04:59.690
Le processus peut également choisir d'écrire ses structures de données internes dans un fichier pour un débogage hors ligne

04:59.690 --> 05:01.370
avant qu'il ne s'éteigne.

05:02.600 --> 05:07.940
La deuxième action que le processus peut entreprendre consiste donc à effectuer le traitement personnalisé lors de la réception

05:07.940 --> 05:09.710
d'un signal du système d'exploitation.

05:09.710 --> 05:14.060
Et la troisième option que le processus peut faire est d'ignorer simplement le signal.

05:14.240 --> 05:14.870
C'est vrai.

05:14.870 --> 05:20.930
Ainsi, lorsqu'un processus reçoit le signal, il peut effectuer l'une de ces trois actions.

05:20.930 --> 05:24.400
Soit il exécute l'action par défaut du signal.

05:24.410 --> 05:28.700
Ensuite, le processus exécute l'action personnalisée du signal.

05:28.700 --> 05:33.310
Enfin, le processus peut tout simplement ignorer le signal.

05:33.320 --> 05:40.160
Dans le second cas, lorsque le processus effectue un traitement personnalisé à la réception d'un signal du système

05:40.160 --> 05:46.610
d'exploitation, ce traitement personnalisé est effectué en invoquant une fonction spéciale, cette fonction

05:46.610 --> 05:50.990
spéciale est appelée routine de gestion des signaux.

05:52.210 --> 05:52.780
C'est vrai.

05:55.070 --> 05:58.220
Quelques points sur les routines de traitement des signaux.

05:58.550 --> 06:04.250
Une routine de gestion des signaux est une fonction spéciale qui est invoquée lorsque le processus reçoit le signal.

06:04.400 --> 06:05.030
C'est vrai.

06:05.030 --> 06:11.510
Le processus doit donc prendre des dispositions pour que chaque fois qu'il reçoit un certain signal du système

06:11.510 --> 06:16.870
d'exploitation ou d'un autre processus, il doive invoquer une fonction spéciale.

06:16.880 --> 06:19.950
Cette fonction spéciale est appelée routine de traitement des signaux.

06:19.970 --> 06:25.790
Nous verrons, lorsque nous discuterons de la mise en œuvre, comment un processus peut enregistrer une fonction

06:25.790 --> 06:29.070
personnalisée correspondant à un certain signal.

06:29.090 --> 06:35.960
Un processus doit donc enregistrer la routine en fonction du type de signal, c'est-à-dire qu'il doit invoquer

06:35.960 --> 06:37.220
la fonction f.

06:37.670 --> 06:40.910
Ici, la fonction F est une routine de traitement des signaux.

06:41.000 --> 06:41.630
C'est vrai.

06:41.630 --> 06:43.850
Ainsi, lorsque le signal S est reçu.

06:43.970 --> 06:49.160
C'est ce qu'on appelle l'enregistrement d'une routine de traitement du signal contre le signal.

06:49.840 --> 06:54.910
La routine de traitement des signaux de droite est exécutée avec la priorité la plus élevée.

06:54.940 --> 06:56.780
Notez le terme "priorité absolue".

06:56.800 --> 07:00.410
Cela signifie que dès que le processus reçoit le signal.

07:00.430 --> 07:08.170
Que ce soit du système d'exploitation ou de l'autre processus, il est possible qu'au moment où le processus

07:08.170 --> 07:13.750
reçoit le signal, il soit occupé à exécuter une partie de son code.

07:13.930 --> 07:14.620
C'est vrai.

07:14.620 --> 07:20.590
Ainsi, dès que le processus reçoit le signal, il s'exclut du flux

07:20.590 --> 07:24.280
d'exécution normal, n'est-ce pas ?

07:24.580 --> 07:34.810
La préemption signifie qu'un processus interrompt immédiatement son flux d'exécution normal et exécute la routine de gestion du signal, qui a été

07:34.810 --> 07:39.730
enregistrée par rapport au signal que le processus vient de recevoir.

07:40.000 --> 07:47.230
Vous pouvez donc constater que lorsqu'un signal est reçu, la routine de gestion du signal est immédiatement invoquée après

07:47.230 --> 07:50.690
avoir perturbé le flux d'exécution normal du processus.

07:51.530 --> 07:55.670
C'est ainsi que la routine de gestion des signaux est invoquée.

07:55.790 --> 08:02.540
C'est ainsi que le processus se comporte lorsqu'il reçoit un signal du système d'exploitation ou

08:02.540 --> 08:04.190
d'un autre processus.
