Ajout de l'exo 6

This commit is contained in:
Tom MOGULJAK 2023-09-27 17:17:45 +02:00
parent 2fff4e7471
commit fbd393debc
2 changed files with 54 additions and 1 deletions

View File

@ -360,3 +360,38 @@ XXXXXXXX BB BB BB BB BB BB BB BB BB BB BB BB BB BB BB BB |CCCCCCCCCCCCCCCC|
- imprimer le retour de fork(), getpid(), getppid().
- attendre la fin de son fils (wait()), et imprimer son code de retour.
- afficher alors la liste de tous les processus actifs (execl() avec ps -ef).
## Exercice 5
> Le but de l'exercice est de détecter la présence d'un zéro dans un tableau `unsigned char` de taille `SIZE` en découpant le travail entre plusieurs processus.
> Combien y-at-il de 0 au plus dans le tableau ? Complétez la fonction `search`, et testez.
1. Première version. Modifiez le programme pour que le processus crée un fils. Le fils et le père cherche chacun le zéro dans une moitié du tableau. Le fils communique le résultat à son père. Celui-ci, à l'aide de son propre travail, donnera la réponse.
2. Deuxième version. Votre programme accepte sur la ligne de commande un entier n entre 1 et 100. Le programme crée n fils qui cherche chacun dans une partie du tableau. Le père attend la fin de chacun de ses fils, récupère leur résultat et affiche la réponse.
3. Troisième version. On améliore la version précédente. Lorsque qu'un fils trouve le 0 dans le tableau, et que le père en est averti, faites en sorte que les autres fils vivants se terminent. On utilisera la primitive `kill()` qui perment d'envoyer le signal de terminaison (`SIGTERM`) à tout un groupe.
## Exercice 6
> Exécutez le programme [session.c](TP3/Exo6/session.c) et interprétez avec `ps` les informations `pid,ppid,pgid,sess,tpgid` des processus créés.
```shell
tom@Error404:/mnt/c/Users/naser/Documents/scr/r305_dm/TP3/Exo6$ ./session
session = 9
session = 8442
```
```shell
tom@Error404:/mnt/c/Users/naser/Documents/scr/r305_dm/TP3/Exo6$ ps -o pid,ppid,pgid,sess,tpgid
PID PPID PGID SESS TPGID
103 102 103 103 8443
8443 103 8443 103 8443
```
> On peut voir qu'on a bien créé un processus fils, mais vu qu'on est pas leader de session on ne peut pas créer de nouvelle session, c'est pourquoi `sess` et `tpgid` sont les mêmes que le père.
## Exercice 7

18
TP3/Exo6/session.c Normal file
View File

@ -0,0 +1,18 @@
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
if (fork()){
printf("session = %d\n",getsid(getpid()));
while(1);
} else {
setsid();
printf("session = %d\n",getsid(getpid()));
while(1);
}
return 0;
}