Vous êtes sur la page 1sur 3

Atelier Systèmes et Réseaux Iset Médenine

fork() : permet la duplication du processus courant.


TP4 : Gestion des processus avec le
getpid() : retourne le PID du processus appelant.
langage C
getppid(): renvoie le PPID du processus appelant

getuid() : retourne le UID du processus appelant


1. Définition
getgid() : retourne le GID du processus appelant
Un programme se compose d’un ou plusieurs fichiers composés
d’instructions. Un programme est une entité passive .Lorsque le exit() : terminaison normale de l’exécution du processus.
programme est lancé, un processus est crée par le système wait() / waitpid() : mettre le processus père en attente de la mort de
d’exploitation .un processus est une entité active et possède des l’un de ses fils (synchronisation).
caractéristiques (PID, PPID, UID) qui peuvent varier dans le temps
(priorité, adresse de l’instruction suivante, par exemples). Exercice1

2. Etat d’un processus Ecrire un programme en C permet d’utiliser les primitives retournant
les principaux attributs d’un processus.
L’état du processus peut être les suivants :
Exercice2
-D : Le processus est interruptible
En utilisant la primitive de création d’un processus fork(),écrire un
-R : Le processus est en train de d’exécuter programme c permet de créer un processus fils du processus courant
-S : Le processus est endormi faire afficher son pid.

-T : Le processus est stoppé Exercice3

-Z : Le processus est Zombi : il est mort mais son père ne le sait pas, Considérons la source suivante dans lequel on trouve essentiellement
il attend que son père fait connaissance de sa mort. trois instructions : L’affichage d’un message, l’appel à la fonction
fork et finalement l’affichage d’un second message.
3. Les primitives associées aux processus

Mlle.Ratiba BEN AZZOUN 1 A.U : 2010-2011


Atelier Systèmes et Réseaux Iset Médenine

#include <stdio.h> printf(" le pid de mon fils est %d \n ",pid);


#include <unistd.h> wait();
main() { }}
1) Analyser les résultats affichés.
printf(‘’ bonjour de %d\n ‘’,getpid()) ;
fork() ; Exercice 5
printf(‘’ fin de %d\n ‘’,getpid()) ;
Soit l’exemple suivant :
}
Compilez cette source avec la commande gcc –o ex3 ex3.c et #include<stdio.h>
expliquez le résultat obtenu lors de l'exécution. #include<stdlib.h>
Exercice 4 #include<unistd.h>
#include<sys/wait.h>
Copiez ce code, faites sa compilation et exécutez-le main()
{
#include<sys/types.h>
#include <unistd.h> pid_t ret,fils_mort;
#include<stdio.h> int status;
main(){ ret = fork() ;
pid_t pid; if (ret == 0)
pid = fork(); {
if(pid == -1) printf(“je suis le fils ; mon pid est : %d\n”,getpid());
printf("erreur creation de processus");
prinf(“pid de mon pére : %d\n “,ret);
else
if(pid == 0) }
{printf("je suis le fils ,mon pid est %d\n",getpid()); else
printf("le pid de mon père est %d\n",getppid()); {
execlp("ls","ls","-l","/",NULL);} printf(“ je suis le père, mon pid est : %d\n “,getpid());
else printf(“pid de mon fils :%d \n“,ret) ;
{ fils_mort = wait(&status) ;
printf("je suis le pere ,mon pid est %d\n ",getpid());
printf(“je suis le père, le pid de mon fils mort est %d\n“,fils_mort);

Mlle.Ratiba BEN AZZOUN 2 A.U : 2010-2011


Atelier Systèmes et Réseaux Iset Médenine

if (WIFEXITED(status)) 2) Utiliser kill -9 PID pour faire terminer le processus fils d’essai.
printf(“je suis le pére, le code retour de mon fils est %d\
Afficher une autre fois la liste des processus, qu'est ce que vous
n “,WEXITSTATUT(status));
remarquez ??
}}
1) Exécuter ce programme 3) Lancer l'exécution de essai une autre fois et faire terminer le
2) à quoi sert l’utilisation de WIFEXITED (status) ? processus père qu'est ce que vous remarquez??
3) quelle est le rôle de la primitive WEXITSTATUT(status) ?
4) changer le code de essai.c avec :

Exercice 6 #include <stdio.h>

soit le programme essai.c suivant : main()


#include <stdio.h> {int pid ;
main() pid=fork();
{int pid ; if(pid==0)
pid = fork(); {for(;;)
if (pid == 0) printf(“je suis le fils \n”);
{for(;;) }
printf(“je suis le fils \n”); else
} {for(;;)
else printf(“je suis le pére \n”);
{for(;;) wait();
printf(“je suis le pére \n”); }}
}}
4) Lancer de nouveau l'exécution de essai.c, affichez à l'aide ps -Al
1) Lancer l'exécution de essai.c puis afficher la liste de processus l'ensemble des processus, utilisez kill pour terminez le processus
lancés, expliquez ?? pére, qu’est ce que vous remarquez??

Mlle.Ratiba BEN AZZOUN 3 A.U : 2010-2011

Vous aimerez peut-être aussi