l2 Système Compte Rendu Tp n6 Gestion Des Processus Et Signaux Sous Linux Partie 1

3
Compte rendu du TP n°6 Gestion des processus et signaux sous Linux (partie 1) RAHAL Majda Nafissa - 7/05/2012 Exercice 1 : 1. Rôle des commandes : bg : exécuter une tâche en arrière plan (BackGround) Schéma : bg pid fg : (re)mettre une tâche au premier plan (ForeGround) Schéma : fg pid jobs : afficher la liste des processus en arrière plan Schéma : jobs ps : lister les processus en cours d'exécution (dans le terminal où on l'a exécutée) Schéma : ps ou ps -l pour la forme longue avec l'id du père pstree : afficher une arborescence des processus en cours d'exécution Schéma : pstree kill : envoyer un signal Schéma : kill pid (pid du processus auquel on veut envoyer le signal) killall : envoyer un signal à tous les processus Schéma : killall * On peut aussi faire killall nomExterneProc pour envoyer un signal à toutes les copies d'un même programme. Note : Dans les schémas, nous avons volontairement omis certaines options. 2. On crée le programme suivant en C, et qui fait une boucle vide infinie : int main(){ while(1); } On compile avec gcc -o boucle boucle.c Puis on l'exécute avec ./boucle 3. Pour obtenir le pid de ce programme ainsi que celui de son père, on ouvre un autre terminal (on ne peut pas le faire dans le même terminal vu que le programme boucle est toujours en cours d'exécution), et on tape : ps -al L'option -a sert à afficher tous les processus en cours (même ceux créés 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 père, entre autres). On a ce qui suit comme résultat : F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD 0 R  1000  4657  3915 99  80   0 -   425 -      pts/0    00:08:20 boucle 0 R  1000  4760  4661  0  80   0 -  1124 -      pts/2    00:00:00 ps 4. En pressant la combinaison Ctrl+Z on suspend le programme en cours (mais on ne l'arrête pas totalement). page 1

description

system

Transcript of l2 Système Compte Rendu Tp n6 Gestion Des Processus Et Signaux Sous Linux Partie 1

  • 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 : bgpidfg : (re)mettre une tche au premier plan (ForeGround)

    Schma : fgpidjobs : afficher la liste des processus en arrire plan

    Schma : jobsps : 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 prepstree : afficher une arborescence des processus en cours d'excution

    Schma : pstreekill : 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.cPuis 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 boucleest toujours en cours d'excution), et on tape :

    psalL'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 :

    FSUIDPIDPPIDCPRINIADDRSZWCHANTTYTIMECMD0R10004657391599800425pts/000:08:20boucle0R10004760466108001124pts/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 kill4657tout simplement).

    8. On refait les questions 4 et 7 mais cette fois avec la commande kill :Ctrl+Z (suspension) est quivalente killTSTP4657Ctrl+C (terminaison) est quivalente killINT4657On 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.shCe 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+COMMAND2908majda200501214281108S00.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>>helloCeci 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.shCeci 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