Vous êtes sur la page 1sur 2

CENTRE UNIVERSITAIRE DE BORDJ BOU ARRERIDJ Licence 2 : informatique.

INSTITUT DES SCIENCES ET TECHNOLOGIES Semestre : 2


DÉPARTEMENT MATH ET INFORMATIQUE Matière : Système d’exploitation 1.

Série TP n°3
(Gestion des processus)
Notion :
Chaque processus en cour d’exécution dans un système et qui utilise un ensemble des ressources correspond à un ou
plusieurs processus du système. Chaque processus possède un numéro de processus (PID). Sous linux la
commande ps permettre de voire la liste des processus en cours d’exécution. Ps, axj, u, f, top, pstree.
Fork() : fonction pour créer un processus. La valeur de retour n de cette fonction indique :
Si n > 0 on est dans le processus père.
Si n = 0 processus fils.
Si n = -1 fork a échoué on n’a pas pu créer de processus.
L’appel-système fork() est déclaré dans <unistd.h>.
Getpid () : cette fonction retourne le numéro du processus courant.
Getppid() : cette fonction retourne le numéro du processus père.

Exercice 01 :
A l’aide de la commande ps, afficher la liste de tous les processus tournant sur votre machine, avec les
informations suivantes :
PID ; PPID ; UID ; STIME ; COMMAND.
1. A quoi correspondre les deux informations STIME et UID.
2. Quel est le premier processus lancé après le démarrage du logiciel Cygwin ?
3. A quelle heure le logiciel Cygwin a-t-elle démarré ?
4. Afficher les processus Windows ?
5. Quel est le premier processus lancé après le démarrage du système ?
6. A quelle heure votre machine à démarrer ? #include <stdio.h>
#include <stdlib.h>
Exercice 02 : #include <sys/types.h>
Que fait le programme ? int main(void) {
pid_t pid;
printf("bonjour, ");
pid =fork();
switch (pid){
case -1 : printf ("Erreur \n");
break;
case 0 : printf ("Fils \n");
break;
default : printf ("Père \n");
break;

}
wait (NULL);
return 0;
}
Exercice 03 : #include <stdio.h>
#include <stdlib.h>
1. Compiler le programme. #include <sys/types.h>
2. Exécuter le programme plusieurs fois. #include <unistd.h>
3. Pourquoi cinq lignes sont-elles affichées alors int main(void) {
Qu’il n’y a que trois printf dans le programme. int valeur;
printf("printf-o avant fork : processus Num %d\n ",
4. Ajouter maintenant la ligne suivante derrière (int) getpid());
l’appel à fork : if (valeur = =0) sleep(4) ; valeur =fork();
printf("printf-1 valeur retournée par la fonction
que se passe-t-il ? pourquoi ? fork: %d \n", (int) valeur);
Exercice 04 printf("printf-2 je suis le processus numéro : %d
\n", (int) getpid());
Ecrire un programme qui affiche bonjour puis crée return 0;}
Un processus fils.
Ensuite ils devront afficher tous les deux Au revoir.
Exercice 05
Ecrire un programme qui affiche le pid et le ppid de processus et cèer trois procussus fils suivi de leur numéro
dans l’ordre de création. On doit observer ;
PID : …..
PPID : ….
Fils1
Fils2
Fils3
Exercice 06
Ecrire un programme qui crées deux fils, l’un affiche les entiers de 1 à 50, l’autre de 51 à 100 .
Modifier le programme précédent pour que l’affichage soit 1 2 ..200.
Exercice 07
En cas d’erreur, fork() renvoie la valeur –1, et la variable globale errno contient le code d’erreur,
fini dans <errno.h>. Ce code d’erreur peut être soit ENOMEM, qui indique que le noyau n’a plus
assez de mémoire disponible pour créer un nouveau processus, soit EAGAIN, qui signale que le
système n’a plus de place libre dans sa table des processus, mais qu’il y en aura probablement sous
peu. Un processus est donc autorisé à réitérer sa demande de duplication lorsqu’il a obtenu un code
d’erreur EAGAIN.
- Ecrire un programme qui représente ce problème. Avec l’indentification de l’utilisateur avec
- uid_t getuid (void);
- uid_t geteuid (void);
- Il faut spécifier votre affichage comme suit :

Pere : PID=4340, PPID=4284, PID fils=4341


Fils : PID=4341, PPID=4340