Fork
Fork
Fork
Systèmes d’exploitation
TD-TP - Gestion des processus Corrigé
Exercice 1
Soit le programme suivant :
int main(void)
{
fork() ; printf("fork 1 \n") ;
fork() ; printf("fork 2 \n") ;
fork() ; printf("fork 3 \n") ;
return(0) ;
}
Réponse
Pour 3 fork, on obtient au total 8 processus, fork 1 est affichée 2 fois, fork3 est affiché 4 fois et fork3 8
fois.
Anissa OMRANE 1
Exercice 2
Réponse
Pour cet exercice comme pour l’exercice 1, la boucle se traduit comme 3 fork, on obtient au total 8
processus.
Rouge : i=0 Si pid est égal à -1, cela signifie qu'il y a eu une erreur
Vert :i =1 lors de la création du processus fils, et le programme se
Bleu : i=2 termine avec un code de sortie -1.
si pid est égal à 0, cela signifie que
le code en cours d'exécution
appartient au processus fils,
Réponse
a) Le code de 1 génère un total de 8 processus
b) le message bonjour sera affiché 7 fois par les 7 fils.
c) Je suis père est affiché 7 fois aussi mais 3 fois par le processus père (main principal), 2 fois pas
le premier fils créé et une fois par les deux autres fils créés.
d) Lorsqu’on ajoute le i=0 dans le code il y a des fils qui meurent et d’autres naissent le processus
de création est infini
Exercice 3
1. Soit l’exécution suivante d’un programme c :
Je suis le processus fils 3501 mon papa est 3500
Je suis le processus fils 3502 mon papa est 3500
Je suis le processus pere 3500
Ecrire le programme C qui aurait permis la génération d’une telle arborescence.
Anissa OMRANE 3
Réponse
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
void main()
{
int i, p, p1;
wait(0);
}
}
Anissa OMRANE 4
a) Décrire l’arborescecne des processus générée
Réponse
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
void main()
{
int i, p, p1;
wait(0);
}
}
Anissa OMRANE 5
Exercice 5
1. Ecrire un programme C qui permet de créer l’arborescence ci-dessous formée par les
processus Pa, Pb, Pc, Pd, Pe, Pf, Pg. Chaque processus affiche la lettre qui lui correspond
(exemple : le processus Pa, affiche « je suis le processus a »)
Pa
Pb Pc
Pd Pe Pf Pg
2. Que faut-il faire pour que le processus Pa, attende la terminaison de tous les autres
processus ?
Anissa OMRANE 6
#include <stdio.h>
#include <unistd.h>
void main()
{
int pida,pidb,pidc,pidd,pide,pidf,pidg;
int i;
// pida=getpid();
printf("je suis le processus a %d\n",getpid());
pidb = fork();
if(pidb==0)
{
printf("je suis le processus b %d et mon papa est a %d
\n",getpid(),getppid());
pidd = fork();
if(pidd==0)
{
printf("je suis le processus d %d et mon papa est b %d
\n",getpid(),getppid());
}
else
{
pide = fork();
if(pide==0)
{ printf("je suis le processus e %d et mon papa est b
%d\n",getpid(),getppid());
}
else
{
pidf = fork();
if(pidf==0)
{ printf("je suis le processus f %d et mon papa est b
%d\n",getpid(),getppid());
}
else
{ wait(); wait(); wait();}
}
}
}
else
{
pidc = fork();
if(pidc==0)
{ printf("je suis le processus c %d et mon papa a %d
\n",getpid(),getppid());
pidg = fork();
if(pidg==0)
{ printf("je suis le processus g %d et mon papa est c
%d\n",getpid(),getppid());}
else
wait();
}
else
{
wait();
}
}
}
Anissa OMRANE 7