Bonjour,
je n'arrive pas à faire l'exo2
Exercice 1 :
Écrire un programme qui réalise le traitement suivant :
- Le processus exécute une boucle sans fin en attendant de recevoir le signal SIGUSR1.
Dés qu’il reçoit ce signal, il affiche sur la sortie standard son PID et le numéro du
signal reçu, puis se termine.
Le processus sera lancé en tâche de fond et le signal lui sera envoyé par le shell de connexion
avec la commande kill ( consulter le man de cette commande du shell pour voir comment on
doit l’utiliser).
Le programme source sera codé dans le fichier signal1.c et le programme exécutable sera
codé dans le fichier signal1.
La trace d'exécution du processus sera enregistrée dans le fichier signal1.trace.
Exercice 2 :
Écrire un programme qui réalise le même traitement que celui de l’Exercice 1, mais qui sera
mis en oeuvre de la façon suivante :
- le signal SIGUSR1 sera émis par un second processus dont le traitement sera codé dans
le fichier signal2.c et le programme exécutable dans le fichier signal2.
La trace d'exécution du processus sera enregistrée dans le fichier signal2.trace.
- le processus signal1 sera lancé en tâche de fond, ensuite le processus signal2
sera lancé en premier plan en lui passant en paramètre le PID du processus signal1.
voici le code de l'exo 1: qui compile et s'execute parfaitement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 #include <unistd.h> #include <stdio.h> #include <time.h> #include <stdlib.h> #include <sys/types.h> #include <signal.h> typedef void ( * PtrFct) (int) ; void traiterSIGUSR1(int numSig); int main(void) { time_t t; t=time(NULL); printf("%s\n","*****************************************"); printf("%s\n","*****************************************"); printf("Date et heure: "); printf("%s\n",ctime(&t)); /* retourne le login de l utilisateur*/ printf("LOGIN: "); printf("%d\n", system("logname")); printf("%s\n",""); /*retourne l'UID de l'utilisateur*/ printf("UID de l'utilisateur :"); printf("%d\n", getuid()) ; printf("%s\n","*****************************************"); PtrFct retFct; retFct = signal ( SIGUSR1, traiterSIGUSR1); if (retFct == SIG_ERR ) { perror ("erreur signal") ; exit(1) ; } while (1) { } } void traiterSIGUSR1(numSig) { pid_t idProc1; printf(" PID= %d , numéro du signal = %d \n ", idProc1, numSig); exit(0); }
Partager