Ajout de l'exo 6
This commit is contained in:
parent
2fff4e7471
commit
fbd393debc
37
README.md
37
README.md
@ -359,4 +359,39 @@ 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().
|
- imprimer le retour de fork(), getpid(), getppid().
|
||||||
- attendre la fin de son fils (wait()), et imprimer son code de retour.
|
- 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).
|
- 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
18
TP3/Exo6/session.c
Normal 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;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user