ème
Département d’informatique 2 année LMD
Série 2 :
Création de processus (fork) Sous Linux
Fonction fork :
int fork() : cette primitive crée un nouveau processus (appelé fils) qui est une copie exacte du
processus appelant (processus père). La différence est faite par la valeur de retour de fork(),qui est
égale à zéro chez le processus fils, et elle est égale au pid du processus fils chez le père.
Ecrire un programme qui permet de créer un processus fils en utilisant la fonction fork(). Ajouter la
fonction exit(0) pour sortir en cas d’erreur. Ajouter des instructions qui permettent d’afficher
l’identifiant de chaque processus.
Exercice 2 :
void main()
{
int pid; int x = 1;
pid = fork();
if (pid == 0) {
printf("x=%d\n", ++x);
exit(0);
}
printf(" x=%d\n", --x);
}
Que serai l’affichage si on enlève l’instruction exit(0) ?
Exercice 3 :
Remarque : chaque processus devra afficher son pid et le pid de son parent.
Père
Fils1 Fils2
Fils1.1 Fils1.2
1/2
Université de Blida 1 Système d’exploitation
ème
Département d’informatique 2 année LMD
Exercice 4 :
Dessinez l’arborescence des processus (père qui représente le programme principal main et les fils
crée par fork) de chaque programme.
Exercice 5 :
Dessinez l’arborescence des processus (père qui représente le programme principal main et les fils
crée par fork) du programme suivant. Et indiquez pour chacun les valeurs des variables i et j
(initiales, intermédiaires et finales) :
void main()
{
int i, j, k ; i=j=2;
k=fork(); /*1*/
if(k==0){
i=i+2; k=fork(); /*2*/
if(k==0) j=j+4;
else i=i+1;
exit(1);
}
else {
k=fork(); /*3*/
if(k==0) j=j+20;
else {
i=i+20;
j=i+10;
}
}
i=j+50;
}
2/2