0% ont trouvé ce document utile (0 vote)
595 vues2 pages

TD1 Correction

Le document décrit des exercices sur l'utilisation de la fonction fork() en C pour créer des processus fils. L'exercice 1 demande de déterminer le nombre de lignes imprimées par différents programmes et de dessiner les arbres de processus. L'exercice 2 demande d'écrire un programme créant 10 processus fils numérotés de 0 à 9. L'exercice 3 demande le nombre de processus créés par une ligne C utilisant fork() et de dessiner l'arbre.

Transféré par

pojef57126
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
595 vues2 pages

TD1 Correction

Le document décrit des exercices sur l'utilisation de la fonction fork() en C pour créer des processus fils. L'exercice 1 demande de déterminer le nombre de lignes imprimées par différents programmes et de dessiner les arbres de processus. L'exercice 2 demande d'écrire un programme créant 10 processus fils numérotés de 0 à 9. L'exercice 3 demande le nombre de processus créés par une ligne C utilisant fork() et de dessiner l'arbre.

Transféré par

pojef57126
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Année Universitaire : 2019/2020

Matière : Système d'exploitation II


Niveau : LCE1
Institut Supérieur d'Informatique de Mahdia TD 1 : fork() ()

Exercice 1 :
Combien de lignes « hello ! » imprime chacun des programmes suivants ? Dessiner l’arbre généalogique
des processus engendrés.

Exemple1 Exemple2 Exemple3

Corrigé

Exemple1 Exemple2 Exemple3

P1 P1
Hello P1 Hello
Hello Hello
Hello Hello Hello
P2 P4 P2 P3
P2
Hello
P3
P3

Exercice 2 :
Ecrire un programme qui crée 10 processus fils. Chacun d'entre eux devra afficher dix fois d'affilé son
numéro d'ordre entre 0 et 9.
Corrigé :
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main() {
int i, j;
/* boucle pour creer les 10 processus fils */
for (i=0; i < 3; i++) {

1
Puisque P1 est le père alors switch (fork()) {
fork() = 1 donc il va créer P2 case -1: fprintf(stderr, "Erreur dans %d\n", getpid());
avec fork() et aussi il va créer
P3 avec fork() perror("fork");
exit(1);
case 0: /* On est dans un fils */
for (j = 0; j < 3; j++) {
printf("%d\n",i);
}
exit(0);//ou bien i=3;
default : ;
}
}
//sleep(0);
for (i=0; i < 3; i++) {
wait(NULL);//will only wait until the child process is completed. But, wait(&status) will return the process id of the child
process that is terminated.
}
/* Ne pas oublier de sortir sinon on cree fact(10) processus */
exit(0);
}

Exercice 3 :
1. Combien de processus engendre l’évaluation de la commande C :
fork() && ( fork() || fork() ) ; 4 processus
2. Dessiner l’arbre généalogique des processus engendrés par cette ligne.
Corrigé :

P1

P2 P3

P4

Puisque P3 est le fils de P1 alors la valeur de fork()=0


donc 0||fork(). Pour cela P3 va créer un autre processus P4
Fork()&&(fork()||fork())

Vous aimerez peut-être aussi