Vous êtes sur la page 1sur 11

Atelier Système 1 ISET du Kef

TP 3 : Gestion des processus

Objectifs L'objectif de ce TP est de gérer les processus sous UNIX à travers la


manipulation des commandes UNIX et les programmes C.

Matériel requis Un ordinateur doté d'un système d’exploitation Windows, et d'un


environnement UNIX.

Travail demandé Vous aurez à rédiger un rapport dans le quel vous répondez à la
partie pratique.

1. Environnement de travail

a. Unix

UNIX est un SE multi-utilsateurs et multi-tâches qui a été développé en 1970 aux


laboratoires BELL . Il est structuré en deux couches :
- le noyau : qui inclut la gestion des processus, des fichiers et de la mémoire.
- la couche utilisateur : qui inclut les interpréteurs de commandes, les éditeurs, etc.

Le dialogue entre l’utilisateur et le SE UNIX s’effectue à la base à travers un


interpréteur de commande (shell) qui offre une grande flexibilité dans la manipulation
des commandes.

b.Ubunto

Ubunto est un système d'exploitation libre, qui est disponible gratuitement et constitué
de logiciels libres. La version à installer au cours de ce TP, est 10.4 , 64 bits.

Le CD d'installation permet d'utiliser l'environnement Ubunto sans l'installer sur la


machine, pour le faire il suffit de redémarrer la machine avec le CD dans le lecteur.
Ou bien, réaliser une installation complète de Ubunto, soit en tant que système
d'exploitation unique, ou bien à coté de Windows.

Le CD d'installation offre une troisième possibilité, celle qu'on va adopter pour la


réalisation de notre projet: installer ubunto dans windows (comme n'importe quelle
autre application), et par la suite on peut démarrer soit sous Windows ou sous Unix.
La figure ci-dessous présente le menu de Ubunto, nous allons choisir "installer dans
Windows."
Atelier Système 1 ISET du Kef

Par la suite, nous allons introduire un login et un mot de passe, pour pouvoir se
connecter sous Ubunto, nous introduisons alors: login : user , mot de passe: user.

2 .Les commandes de gestion des processus

Remarque:
Pour afficher l'aide de chacune des commandes , utilisez la commande man:
Syntaxe : man <nom de la commande>
ou bien, accédez au résumé du manuel à travers la commande help.
Syntaxe : help -- <nom de la commande>

 ps (Affichage de la liste des processus )

la commande ps permet d'afficher seulement les processus qui tournent sur la console
courante . Cette commande affiche les processus avec les colonnes suivantes :

UID PID PPID STIME TTY CMD

- UID : contient le nom du propriétaire du processus.


- PID : le Process ID, ou identifiant numérique du processus utilisé par la machine.
- PPID : le PID du Parent du processus. Cela désigne donc le processus qui a lancé le
processus.
- STIME : le temps de début d'exécution du processus.
- CMD : le nom de la commande qui a généré le processus.

ps -al : permet d'afficher les processus avec tous les détails.


ps -e : permet d'afficher tous les processus qui tournent sur la machine.
Atelier Système 1 ISET du Kef

Pour filtrer la liste , vous pouvez effectuer une sélection des lignes désirées en
appliquant la commande grep au résultat de la commande ps, de la manière suivante:
ps | grep "chaine de caractère."

De cette manière, il y'aura affichage uniquement des lignes qui contiennent la chaine
de caractère introduite. Dans l'exemple suivant une sélection des lignes contenant la
chaine bash .

A travers cette figure, nous constatons que trois interpréteurs de commandes sont
ouverts: pts/0 , pts/1 et pts/2.

 kill : envoyer un certain signal à un processus

Syntaxe : kill -<SIGNAL> <PID>


<SIGNAL> est une valeur numérique ou une chaîne de caractères désignant un signal.
Pour connaître la liste des signaux existants, essayez la commande kill -l.
<PID> est le Process ID du processuss à qui on désire envoyer le signal.

exemple:
kill -9 244
Le signal 9 indique au système qu’il doit arrêter le processus de PID = 244, qui ne
répond plus.
Atelier Système 1 ISET du Kef

 killall : Une autre façon de tuer un processus est d'utiliser la commande killall
avec un nom de processus, et non pas un PID.
exemple:
killall -9 bash
Cette commande permer de tuer tous les processus portant le nom bash.

 xkill
Dans une interface graphique, il peut également arriver qu'une fenêtre se fige. Pour
tuer cette fenêtre, tapez la commande xkill.
Par la suite vous devez pointer avec la souris sur la fenêtre à tuer. La commande
xkill repère le PID associé à la fenêtre et fait un kill -9 sur ce PID.

Ouvrez un navigateur web et tuez-le avec la commande xkill.

 trap : gérer la réaction associé un signal

En bash, la commande trap permet d'inhiber ou activer la réaction associé un signal.


Certains signaux, comme le signal de terminaison SIGKILL (signal numéro 9) ne
peuvent pas être inhibés.

La commande trap -l affiche la liste des signaux avec leur nom.


La commande : trap ' ' <numéro de signal> permet d'inhiber, si possible, la réaction
associée au signal cité.

Pour activer le réaction il suffit de taper la commande : trap <numéro du signal>.


Pour modifier , la réaction associée au signal cité, on utilise la commande:
trap cmd < numéro du signal>
Atelier Système 1 ISET du Kef

Dans l'exemple ci-dessus, deux interpréteurs de commandes sont ouverts, dans le


premier, nous avons modifié la réaction du signal n°2 , par la commande ps.
Dans le deuxième, nous avons envoyé le signal 2 au 1er bash, et nous remarquons que
la commande ps a été lancé dans l'interface de ce dernier shell.

 nice : gérer les priorités


La commande nice sans argument permet d'afficher la priorité d'ordonnancement en
cours. Si aucun ajustement n'est précisé la valeur de priorité de la commande est
augmentée de 10.

La priorité peut être ajustée avec nice dans l'intervalle -20 (le plus prioritaire) à 19 (le
moins prioritaire.

 sleep : faire une pause


sleep fait une pause pendant une durée correspondant à la somme des valeurs
indiquées sur la ligne de commande . Chaque argument est composé d'un nombre suivi
éventuellement d'une unité (s, m, h, d).

Exemple :
sleep 10; ps -> cette commande va lancer une commande ps 10s aprés la
validation (touche entrée).
sleep 1m, ps -> pareil mais pour une minute
sleep 1h, ps -> pareil mais pour une heure
sleep 1d, ps -> pareil mais pour un jour.

Cette commande permet d'attendre 2s, par la suite lancer la commande ps, ensuite
attendre de nouveau 3s avant de relancer la même commande.

 Exécuter un processus en arrière-plan (en tâche de fond)


Quand vous lancez une processus qui met longtemps à s'exécuter par exemple, ce
processus occupe la ligne tty. On ne peut plus utiliser le terminal ( exemple la
commande xclock qui permet de lancer l'horloge).

Il est possible de détacher le processus fils pour qu'il s'exécute en arrière-plan (en
tâche de fond). Le détachement s'effectue en rajoutant & après le processus à lancer.
Atelier Système 1 ISET du Kef

Lancez la commande xclock en arrière plan.

Travail demandé:
1- Ouvrez deux interpréteurs de commandes tty0 et tty1. Déterminer les PID associés à
chacun d'eux par deux méthodes différentes.

2- Lancez la commande ps dans tty0. Déterminez le PID associé à la commande ps.


Déterminer son PPID. Interprétez le résultat obtenu.

3- Lancez 2 interpréteurs de commandes: tty0 et tty1 , lancez la commande ps -e dans


tty0. Interprétez le résultat affiché en dessinant l'arbre des processus: tracez le
chemin dans la hiérarchie de processus qui mène du processus des shell de connexion
au processus racine init.

4- Connectez-vous en tty0 et tty1. Repérez avec ps le bash qui s'est lancé sur le tty1.
Repérez son PID et tuez-le avec kill. Que se passe-t'il ?

5- Lancez 4 interpréteurs de commandes. Afficher la liste des processus


correspondants en utilisant la commande grep. Notez les PID correspondants. Fermez
le shell associé à tty3 par la commande kill. Fermez tous les interpréteurs de
commandes restant en lançant une seule commande.

6- Ouvrez la fenêtre de calculatrice, puis utilisez la commande xkill pour la fermer.

7- Ouvrez deux interpréteurs de commandes tty0 et tty1.


- Envoyez à partir de tty1 le signal 1 à tty0. Interprétez le résultat obtenu.
Atelier Système 1 ISET du Kef

- Utilisez la commande trap pour changer, au niveau de tty0, la réaction associée au


signal 1 en le remplaçant par l'exécution de la commande pwd.
- Envoyez à partir de tty1 le signal 1 à tty0. Interprétez le résultat obtenu.

8- Affichez la priorité associée au shell du tty0 . Modifiez cette valeur à 12 , puis à -7.

9- Lancez 2 interpréteurs de commandes: tty0 et tty1.


- Lancez la commande pwd au niveau de tty1.
- Opération A : A partir de tty 0, affichez la liste des processus associés aux deux shell,
interprétez le résultat obtenu.
- Lancez la commande xclock au niveau de tty1, puis réalisez l'opération A .
- A partir de tty0, tuez le processus associé au shell tty1, puis réalisez l'opération A .
- Lancez de nouveau tty1 et lancez la commande xclock en arrière plan, et refaire
l'opération A.
- Fermez l'horloge par la commande kill.

3 .La gestion des processus par l'exécution des programmes C

 fork() : Création d'un nouveau processus


La seule manière de créer un nouveau processus sous UNIX est d'utiliser l'appel
système fork(). Le processus courant peut créer un processus fils en utilisant l’appel
système fork . Cette primitive provoque la duplication du processus courant
(processus père).

Cet appel système retourne un entier:


- en cas de succès: -> 0 dans le fils.
-> pid du fils dans le père.

- en cas d'échec: -> -1 dans le père.


-> le fils n'est pas créé.

Suite à un fork, les processus père et fils poursuivent l'exécution du même


programme. La valeur retournée par fork permet de distinguer entre le père et le fils.

Nous allons commencer par créer un fichier: "prog1.c"


Atelier Système 1 ISET du Kef

Le contenu de ce fichier est le suivant:

Pour pouvoir compiler le fichier il doit être placé dans le répertoire courant .
La compilation est réalisée par la commande gcc .

- La commande pwd permet d'afficher le répertoire courant.


- La commande cd permet de modifier le répertoire courant.
- La commande ls permet d'afficher la liste des fichiers dans un répertoire.

Après la compilation, un nouveau fichier est crée, c'est celui qui va être exécuter.
Atelier Système 1 ISET du Kef

L'exécution du fichier est réalisée de la manière suivante:

Ce programme permet de créer un nouveau processus, et d'afficher la valeur retournée


de l fonction fork().
On remarque bien que la partie du programme qui suit l'instruction fork(), est
exécutée deux fois:
- une fois par le processus père : valeur retournée de fork est 2014 (pid du fils).
- et l'autre par le processus fils : : valeur retournée de fork est 0.

 getpid() , getppid() : Affichage de la valeur du PID , et de celle du PPID

- Créez le fichier "prog2.c" suivant :

Ce programme permet de créer un processus et d'afficher le pid , du processus en


cours.
Atelier Système 1 ISET du Kef

Interprétez le résultat obtenu.

- Créez le fichier "prog3.c" suivant :

Expliquez le fonctionnement de ce programme et interprétez le résultat obtenu.

Travail demandé:
1- Soit les deux programmes suivants :
#include <stdio.h>
void main()
{
printf("Bonjour\n");
if (fork()==0)
printf("Papa\n");
else
printf("Maman\n");
}

#include <stdio.h>
void main()
{ int i;
i= fork();
printf("Bonjour ");
if(i==0)
printf("Papa\n");
else
printf("Maman\n");
}
Atelier Système 1 ISET du Kef

Expliquez le fonctionnement de chaque programme, et déterminez le résultat sur


l'écran de chacun d'eux.

2- Soit le programme suivant


#include <stdio.h>
void main()
{
int i;
for (i=1;i<3;i++)
{ fork(); }
printf("i= %d \n",i);
}

Que réalisent le programme suivant ?


Combien de processus sont créés ?
Comment sera l'affichage sur l'écran après son exécution?

3- Modifiez le programme précédant, en ajoutant l'affichage sur la même ligne les


informations suivantes: la valeur de retour de fork , le PID du processus en cours et son
PPID.

Testez le programme et dessinez le graphe des processus.