Vous êtes sur la page 1sur 3

Compte rendu du TP n6

Gestion des processus et signaux sous Linux (partie 1)


RAHAL Majda Nafissa - 7/05/2012

Exercice 1 :
1. Rle des commandes :
bg : excuter une tche en arrire plan (BackGround)
Schma : bgpid
fg : (re)mettre une tche au premier plan (ForeGround)
Schma : fgpid
jobs : afficher la liste des processus en arrire plan
Schma : jobs
ps : lister les processus en cours d'excution (dans le terminal o on l'a excute)
Schma : ps ou psl pour la forme longue avec l'id du pre
pstree : afficher une arborescence des processus en cours d'excution
Schma : pstree
kill : envoyer un signal
Schma : killpid
(pid du processus auquel on veut envoyer le signal)
killall : envoyer un signal tous les processus
Schma : killall
* On peut aussi faire killallnomExterneProc pour envoyer un signal
toutes les copies d'un mme programme.
Note : Dans les schmas, nous avons volontairement omis certaines options.
2. On cre le programme suivant en C, et qui fait une boucle vide infinie :
intmain(){
while(1);}
On compile avec gccoboucleboucle.c
Puis on l'excute avec ./boucle
3. Pour obtenir le pid de ce programme ainsi que celui de son pre, on ouvre un autre
terminal (on ne peut pas le faire dans le mme terminal vu que le programme boucle
est toujours en cours d'excution), et on tape :
psal
L'option a sert afficher tous les processus en cours (mme ceux crs dans
d'autres terminaux). L'option l (pour long listing) sert afficher la forme longue de
ps (c'est--dire celle avec le pid du pre, entre autres).
On a ce qui suit comme rsultat :
FSUIDPIDPPIDCPRINIADDRSZWCHANTTYTIMECMD
0R10004657391599800425pts/000:08:20boucle
0R10004760466108001124pts/200:00:00ps

4. En pressant la combinaison Ctrl+Z on suspend le programme en cours (mais on ne


l'arrte pas totalement).
page 1

Ds qu'on appuie sur les 2 touches, [1]+Stopped./boucle s'affiche.


Le 1 est l'identit du job et le + veut dire que c'est le dernier job suspendu.
Notons enfin que Ctrl+Z est le raccourci clavier quivalent au signal SIGTSTP du
kill.
5. En excutant la commande ps (aprs avoir suspendu le programme avec Ctrl+Z), on
remarque que le processus se trouve maintenant dans l'tat T (pour Trapped) qui veut
dire qu'il est mis en arrire plan et il est suspendu. Notons que le processus se trouvait
avant cela dans l'tat R (pour Running) c'est--dire qu'il s'excutait au premier plan.
6. On remet boucle au premier plan en excutant la commande :
fg1
Le numro 1 correspondant au numro interne du job.
7. En pressant la combinaison Ctrl+C ou Ctrl+D on termine le programme en cours
d'excution, ceci est quivalent faire un killINT4657 (ou encore kill4657
tout simplement).
8. On refait les questions 4 et 7 mais cette fois avec la commande kill :
Ctrl+Z (suspension) est quivalente killTSTP4657
Ctrl+C (terminaison) est quivalente killINT4657
On remarque donc que l'envoi de signaux un processus peut se faire l'aide de
raccourcis claviers mais aussi de commandes partir du terminal.
9. On lance un processus en arrire plan en excutant :
bg./boucle ou bien ./boucle&
La diffrence avec la premire mthode (lancer un processus puis le mettre en arrire
plan) c'est qu'ici le processus est bien en arrire plan mais il est dans l'tat running au
lieu d'tre stopp (ce qui est confirm par la commande psa).
L'utilit d'une telle dmarche est de permettre le basculement entre tches. En effet,
si une commande prend un certains temps s'excuter (ou s'excute indfiniment), le
shell ne nous donnera pas la main tant que la commande n'est pas termine ; on est
alors obligs de lancer un autre shell pour taper une autre commande. Le fait de
lancer cette commande en tche de fond, nous permet de l'excuter mais de
reprendre aussitt la main sur le terminal.
10. La commande taper pour afficher la liste des processus en arrire plan est jobs
(sans arguments).
Exercice 2 :
1. On saisit le script donn et on l'excute l'aide de la commande suivante :
bashscript.sh
Ce script incrmente indfiniment (boucle infinie) et chaque itration, la valeur
d'une variable i de 1 puis l'affiche. Il y a un sleep2, qui cre une attente de 2
secondes avant la fin de chaque itration (pour espacer les affichages).
2. Pour afficher la hirarchie des processus en faisant ressortir la branche depuis laquelle
script.sh est excut (elle sera affiche en gras), on utilise l'option H de la
commande pstree comme suit :
pstreeH2908
page 2

2908 tant le pid de notre processus que l'on obtient au pralable l'aide de la
commande psfa (excute dans un autre terminal).
L'option f de ps permet d'afficher une liste tendue de processus.
3. La commande top permet d'afficher des informations rafrachies dynamiquement et
en temps rel propos des processus s'excutant sur la machine.
Parmi ces informations, on trouve la consommation en mmoire virtuelle et centrale
(avec VIRT et RES respectivement), ainsi que la consommation CPU (pourcentage
indiqu par %CPU).
Dans notre cas, on a l'affichage suivant (qui change en fonction du temps), en
excutant : topp2908
PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND
2908majda200501214281108S00.10:00.84bash

4. On interrompe l'excution du script l'aide de Ctrl+Z, le programme passe alors en


arrire plan et l'tat stopp.
5. Deux manires pour arrter le processus suspendu :
- en envoyant un signal SIGTERM (killTERM2908) pendant que le processus est
suspendu. Le signal ne sera pas excut de suite mais sera mmoris. Ds que l'on
reprend l'excution du processus avec fg, celui-ci sera stopp.
- on reprend l'excution du processus puis on lui envoie un signal SIGTERM avec
kill, le processus sera alors immdiatement stopp.
6. Pour sauvegarder la valeur de i dans un fichier au lieu de l'afficher l'cran, on modifie
ce qui suit dans le script ( la 2e instruction de la boucle) :
echoValeurdei:$i>>hello
Ceci aura pour effet d'envoyer le texte au fichier hello (mme s'il n'existe pas, il sera
cr).
On excute maintenant le programme pour qu'il soit indpendant du terminal et qu'il
continue donc s'excuter aprs la fermeture de celui-ci. On utilise ceci :
nohupbashscript.sh
Ceci nous affichera l'cran que les entres sont ignores et les sorties iront vers
nohup.out. Maintenant, quand on ferme le terminal, le programme continue
s'excuter et la valeur de i s'incrmenter (on peut le voir dans le fichier hello).

page 3