Vous êtes sur la page 1sur 2

USTHB Année 2023/2024

Faculté d'Informatique SYS01


Département SIQ Section L2 ISILB
Série N° 4
(Signaux sous UNIX)

Exercice 1
Soit le programme suivant :
1. #include <signal.h>
2. #include <stdio.h>
3. #include <unistd.h>
4. void gestion_signal (int sig) {
5. printf ("Signal reçu %d\n", sig);
6. signal (SIGINT, SIG_DFL);
7. }
8. int main() {
9. signal (SIGINT, gestion_signal);
10. while(1) {
11. printf("Bonjour\n");
12. sleep(1);
13. }
14. return 0;
15. }

1 Combien de fois faudra-t-il actionner la combinaison Ctrl+C pour sortir de ce


programme ?
it materielle ===> Rit ctr c ==> kill(PID en cours, SIGINT)
e
Exercice 2
Soit le programme suivant :
1. #include <signal.h>
2. #include <unistd.h>
3. #include <stdio.h>
4. #include <sys/wait.h>
5. #include <stdlib.h>
6.
7. int cpt = 0;
8. void handler (int sig) {
9. cpt++ ;
10. }
11. int main() {
12. int i;
13. signal(SIGCHLD, handler);
14. for (i = 0; i < 5; i++) {
15. if (fork() == 0) {
16. exit(0);
17. }
18. }
19. while (wait(NULL) != -1) ;
20. printf("cpt = %d\n", cpt);
21. return 0;
22. }
1. Décrire le déroulement de ce programme.

1/2
2. Est-ce que le programme affiche la même chose chaque fois qu’il est exécuté ?
3. Si la réponse à la question précédente est Oui, donner la valeur de la variable cpt. Si la
réponse est Non, lister toutes les valeurs possibles de la variable cpt.

Exercice 3
Soit le programme suivant :
1. #include <unistd.h>
2. #include <sys/types.h>
3. #include <sys/wait.h>
4. #include<stdio.h>
5. #include <signal.h>
6. #define N 5
7. /*0*/
8. int main() {
9. pid_t pid[N];
10. int i ;
11. /*1*/
12. for (i=0; i<N;i++)
13. if ((pid[i]=fork())==0) {
14. /*2*/
15. while(1)
16. printf("ici fils %d ", i);
17. }
18. /*3*/
19. }
On veut que le processus père utilise les signaux SIGSTOP et SIGCONT pour,
respectivement, suspendre (bloquer) et reprendre (débloquer) l’exécution de ses processus
fils. Au départ, tous les processus fils créés doivent se mettre en pause.
Le processus père répète continuellement le traitement suivant en commençant par le
premier fils : il envoie le signal SIGCONT à un fils puis s’endort pendant une (01) seconde. À
son réveil, il envoie SIGSTOP au même fils et SIGCONT au fils suivant (le fils suivant du
dernier est le premier).
Lorsqu’un processus fils reçoit le signal SIGCONT, il affiche le message indiquant qu’il a
capturé le signal SIGCONT avant de poursuive son exécution.
1. Compléter le code précédent de manière à réaliser ce traitement.

2/2

Vous aimerez peut-être aussi