Vous êtes sur la page 1sur 5

Ecole Nationale d’Electronique et des Télécommunications dee Sfax

TP3 : Gestion des processus

Introduction
Consultez l’adresse suivante https://doc.ubuntu-fr.org/tutoriel/console_commandes_de_base
https://doc.ubuntu fr.org/tutoriel/console_commandes_de_base pour
toute information sur les commandes de base.

Commandes de gestion des processus

1. La commande ps

ps [-ef] [-t liste] [-u liste] [-p


p liste]

La commande ps affiche l’état des processus. Si aucune option n’est spécifiée, ce sont les processus
de la session active qui sont affichés.
Options courantes
-e : affiche tous les processus du système.
-f : affiche les informations au
u format long.
-t : affiche tous les processus
La commande ps auxw affiche tous les processus et leur identifiant utilisateur associé.
La commande pidof extrait le PID d’un processus.
2. La commande kill

Kill [-Numéro-du-signal]
signal] PID [PID…]

Lorsqu’un processus est lancé en arrière plan, il ne peut pas être arrêté par les touches ordinaires
d’interruption (touche Supp ou ctrl-C).
ctrl C). On doit utiliser Kill pour envoyer un signal au processus qu’on
souhaite arrêter. Les processus peuvent réagir à différents signaux. La
La liste des signaux disponibles
peut être affichée avec la commande : kill –l.l. Le tableau suivant résume quelques exemples de
signaux :

Signal Utilisation
Envoyé par un processus père à tous ses fils
1 ou SIGHUP
lorsqu’il termine son activité
Signal d’interruption d’un processus. Il est
2 ou SIGINT envoyé par l’activation de la touche Supp ou
Ctrl-C
9 ou SIGKILL Destruction et mort d’un processus
15 ou SIGTERM Fin normale d’un processus
Exécutée sans option, la commande Kill va envoyer le signal SIGTERM (-15) 15) au processus lui
demandant de se terminer.
L’option -9
9 enverra le fameux signal SIGKILL pour interrompre un processus.
Si on désire terminer tous les processus qui portent un nom donné. Dans ce cas, il faut utiliser la
commande killall (terminer tout). La commande kill envoie au processus l’ordre pour se fermer et la
commande killall envoie le même ordre mais à plusieurs processus lorsque plusieurs portent le
même nom.
3. Les commandes jobs, fg, bg et sleep
3.1. jobs

Elle permet d’identifier les processus exécutés en arrière-plan

3.2. fg et bg

La commande fg %numéro-de-tâche replace le processus à l’avant plan. Dans cette situation, la


combinaison de touche Ctrl+Z permet d’arrêter l’exécution du processus et de reprendre le contrôle
de la ligne de commande.
La commande bg %numéro-de-tâche permet de réactiver en arrière-plan le processus spécifié par le
numéro-de-job.
Le schéma ci-dessous résume l’utilisation des deux commandes fg et bg pour agir sur l’état d’un
processus P dont le numéro de tâche est n.

Utilisation des commandes fg et bg.

Si un processus P dont l’exécution prend un certain temps est lancé en avant plan, le shell sera pris et
n aura plus la main pour saisir des commandes. Avec Ctrl-Z, on peut arrêter temporairement le
processus P : son exécution est suspendue jusqu’à ce qu’on déplace en arrière plan avec la
commande bg.
4. La commande sleep

Elle suspend l’exécution durant n secondes (le processus shell passe à l’état bloqué durant ce temps).

5. Les commands nohup, nice et renice


5.1. La commande nohup : quand le shell est quitté (exit, …), le signal 1 SIGHUP est envoyé
aux processus enfants pour qu’ils se terminent aussi. Lorsqu’un traitement long est lancé en tâche de
fond et que l’utilisateur désire quitter le shell. Ce traitement sera alors arrêté et il faudra tout
recommencer. Le moyen d’éviter cela est de lancer le traitement (processus) avec la commande
nohup. Dans ce cas le processus lancé ne réagira plus au signal SIGHUP, et donc le shell pourra être
quitté ; la commande continuera son exécution. Par défaut les canaux de sortie et d’erreur standard
sont redirigés vers un fichier nohup.out sauf si la redirection est explicitement précisée.
5.2. La commande nice : Les systèmes Unix (et donc Linux) sont éminemment multi-tâches et
multi-utilisateurs. Plusieurs processus peuvent en effet tourner en parallèle, appartenant à plusieurs
utilisateurs différents, le noyau se chargeant d’assurer la répartition des ressources entre les
différents processus. Il gère pour cela une notion de priorité, qui lui permet de favoriser certains
processus au détriment d’autres selon les besoins.
Lorsqu’un sait qu’un processus peut tourner en basse priorité, on peut le signaler lors de son
lancement, en utilisant nice programme (nice signifiant « gentil, agréable »). Le programme
disposera alors d’une proportion amoindrie des ressources du système, il perturbera donc moins les
autres processus s’ils ont besoin de fonctionner. Bien entendu, si aucun autre processus n’a besoin
de ressources, le programme ne sera pas artificiellement ralenti.
La commande nice fonctionne avec des niveaux de priorité : les niveaux positifs (de 1 à 19) rendent
progressivement un processus moins prioritaire, les niveaux négatifs (de -1 à -20) le rendent au
contraire plus avide de ressources. Seul le super-utilisateur est à utiliser ces niveaux de priorité
négatifs.
La syntaxe générale d’utilisation de nice est la suivante :
nice [-valeur] commande [argument]
5.3. La commande renice

Si l’on s’aperçoit qu’une tâche déjà lancée aurait dû l’être avec nice, il n’est pas trop tard pour
réagir : la commande renice permet de change la priorité d’un processus déjà existant.
La commande renice a la syntaxe suivante :
renice [-n prio] [-p] [-g] [-u] ID
L’utilisateur standard ne peut utiliser que les valeurs entre 0 et 19, permettant de baisser la priorité.
L’option –p précise un PID, -g un GID et –u un UID.
6. Les commandes time et top
6.1. La commande time : elle mesure les durées d’exécution d’une commande. C’est un
moyen efficace pour connaitre les temps de traitement et retourne trois valeurs :
 Real : durée totale d’exécution de la commande ;
 User : durée de temps CPU nécessaire pour exécuter le programme ;
 System : durée du temps CPU nécessaire pour exécuter les commandes liées à l’OS (appels
système au sein d’un programme).
Le résultat est sorti par le canal d’erreur standard 2. On peut avoir une indication de la charge de la
machine par le calcul real / (user+system). Si le résultat est inférieur à 10, la machine dispose de
bonne performances, au-delà de 20 la charge de la machine est trop lourde (performances basses).
6.2. La commande top : elle est un utilitaire interactif qui affiche la liste des processus en
cours d’exécution. Par défaut, son critère de tri est l’utilisation actuelle du processeur (touche P)
mais on peut opter pour la mémoire occupée (touche M), le temps processeur consommé (touche T)
ou le numéro de processus ou PID (touche N). La touche k (comme kill) permet d’indiquer un numéro
de processus à tuer. R (comme renice) permet de changer la priorité d’un processus.
Si le processus semble être surchargé, il est ainsi possible d’observer quels processus se battent pour
son contrôle ou consomment toute la mémoire disponible. Il est intéressant en particulier de vérifier
si les processus qui consomment correspondent effectivement aux services réels que la machine
héberge. Un processus au nom inconnu tournant sous l’utilisateur www-data doit immédiatement
attirer l’attention : la probabilité est forte que cela corresponde à un logiciel installé et exécuté sur la
machine en exploitant une faille de sécurité d’une application web.
Top est un outil de base très souple et sa page de manuel explique comment on personnalise
l’affichage pour l’adapter aux besoins et aux habitudes de chacun.

Exercice 1
Interprétez les commandes suivantes

1. La commande tail –f nom_du_fichier est elle pertinente ?


2. Vous avez lancé une commande qui monopolise la console sans afficher car le traitement est
très long. Comment le passer en arrière-plan ?
3. Listez les processus appartenant à root (fichiers personnels de l’administrateur) ?
4. Comment afficher une arborescence de tous les processus ? L’accès à l’aide interne de ps
peut vous aider.
5. Comment savoir d’une manière simple si le processus firefox tourne ?
6. Isolez les numéros des processus correspondant aux divers shells bash lancés ?
7. Exécutez une commande sleep 100& ? Terminez ensuite proprement ce processus ? « & » est
utilisée pour lancer la commande en arrière-plan.
8. Que ce passe-t-il si en tant que root vous « tuez » violement le processus 1 ?
9. Un processus récalcitrant refuse de s’arrêter. Quelle est la seule action possible ?
10. Comment être certain qu’un processus important ne s’arrêtera pas lorsque vous fermerez
votre terminal ?
11. Un processus d’encodage nommé transcode consomme toutes les ressources CPU de la
machine et faisant « ramer » l’ordinateur. Comment connaître sa priorité actuelle ?
Comment l’abaisser ?

Exercice 2
Dans cet exercice, vous lancerez plusieurs processus puis vous utiliserez les fonctions de contrôle de
shell bash pour les gérer et les contrôler. Vous commuterez aussi d’une console virtuelle à une autre.

1. Commencez par vous inscrire sur les terminaux virtuels 1 et 2 (tty1 et tty2).
2. Passez à tty1 et démarrer un processus à l’aide de la commande suivante :
[enetcom@enetcom]$ (while true; do echo –n A >> log; sleep 1; done)
3. Notez désormais que ce terminal est utilisé par votre processus (exécuté en premier lieu). Le
processus que vous avez lancé ajoute la lettre ‘A’ de façon répétée à une seconde d’intervalle
au fichier ~/log. Passez à tty2 et tapez la commande qui vous permet de voir une séquence
de caractère A qui s’allonge (tail -f).
4. Passez à tty1 et interrompez le processus en cours d’exécution en appuyant CTRL-Z sur cette
console. Le shell reporte que le processus a été arrêté et vous donne un numéro de travail
[1]. Passez à tty2 et vérifiez visuellement que le fichier n’augmente plus.
5. Passez à tty1 et lancez à nouveau le processus, cette fois en arrière plan. Vérifier que le
travail [1] est en cours d’exécution. Enfin passez à tty2 et vérifiez visuellement que le fichier
augmente à nouveau.
6. Passez à tty1 et lancez deux autres processus à l’aide de deux commandes. La première
commande est presque identique à celle que vous avez exécutée dans la deuxième étape
mais elle ajoute B. Il suffit de changer A en B. La deuxième exécute la première, en
remplaçant B par C.
7. Entrez jobs et vérifiez que tous les trois sont en cours d’exécution. Passez à tty2 et vérifiez
que le fichier augmente de nouveau en ajoutant cette fois A, B et C chaque seconde.
8. Tuer les trois processus.
9. Vérifiez avec jobs qu’ils sont terminés.
10. Passez à tty1 et nettoyez en effaçant le fichier ~/log.

Exercice 3
1. Lancer le processus sleep 1000 en arrière plan. Notez son PID.
2. Mettre ce processus en avant-plan, puis l’arrêtez (ne le tuez pas) et le mettre en arrière-
plan.
3. Affichez les détails de ce processus.
4. Quelle est la priorité actuelle de ce processus.
5. Baissez sa priorité à la valeur 10.
6. Envoyer le signal n° 15 à ce processus.

Exercice 4
1. Lancer le programme xclock avec une priorité initiale à 10 en tâche de fond.
2. Extraire le PID du processus xclock.
3. Utiliser la commande xargs pour passer le PID de xclock en paramètre à la commande kill et
tuer le processus.
4. Comment s’assurer que xclock est arrêté.

Vous aimerez peut-être aussi