1. Introduction

Rappel des commandes rencontrées et de leur usage basique :

commande rôle usage
man lire les pages de manuel man nomdecommande
apropos trouver des pages de manuel apropos mot-clef
ls afficher le contenu d’un dossier ls [chemin]
cd se déplacer dans l’arborescence cd [chemin]
mkdir créer un dossier mkdir [-p] nomdossier
pwd afficher le dossier courant pwd
rmdir supprimer un dossier rmdir nomdossier
rm supprimer un fichier rm [-r] fichier
mv déplacer ou renommer mv source... dest
cp copier cp source... dest
touch créer un fichier (ou changer son timestamp) touch fichier
cat afficher le contenu d’un fichier cat [fichier]
chmod modifier les droits chmod MODE fichier
chown modifier le propriétaire chown LOGIN:GROUP fichier
umask agir sur les droits par défaut umask [MODE]
ln créer un lien ln [-s] SRC DEST
su changer d’utilisateur su [-] [login]

2. Processus

Un programme est une suite d’instructions que le système doit faire accomplir au processeur pour résoudre un problème particulier

Un processus correspond au déroulement (à l’exécution) d’un programme ou d’une tâche d’un programme par le système dans un environnement particulier.

En analogie avec la cuisine, le programme correspond à la recette, le processus à la préparation, le processeur au cuisinier et les données sont les ingrédients.

Lors de la préparation d’un plat, le cuisinier peut être interrompu par une tâche plus urgente (soigner son doigt qu’il vient de couper par exemple). Une fois cette tâche effectuée, il reprendra la préparation du plat là où il l’avait abandonnée. Celà suppose qu’il ait retenu l’endroit où il était rendu dans la recette et l’état des différents ingrédients. Par analogie, un processeur peut être interrompu quand il exécute un programme par une tâche plus urgente et reprendre la première tâche dès que possible. Celà signifie qu’il a retenu l’état du processus en cours et le contexte d’exécution. Il y a une notion de priorité entre les processus lancés. Les différentes tâches qu’effectue le processeur peuvent être exécutées de façon parallèle (ou pseudo-parallèle), c’est une caractéristique d’un système multi-tâches. La gestion de quel processus est effectué avant quel autre est du ressort de l’ordonnanceur de tâches (scheduler).

Chaque processus peut lui-même réclamer l’exécution d’autres processus. On parle alors de processus père (le processus qui va en lancer un autre) et de processus fils (le processus lancé). Dans les système Unix, un processus unique est lancé au démarrage (init ou systemd), c’est ce processus qui est la racine de l’arbre des processus. Chaque processus a un identifiant (PID), un PID de son père (PPID), un identifiant de l’utilisateur dont il dépend (UID), du groupe (GID), un répertoire courant (PWD), une liste de fichiers accédés, un masque de droits (umask), un TTY, une zone mémoire (MEM). Un processus peut être lancé en avant-plan (foreground), c’est-à-dire que le père ne pourra reprendre la main qu’à la fin de son fils, ou en arrière-plan (background) auquel cas le père continue d’effectuer des tâches tandis que le fils est lancé.

Vous pouvez lancer des programmes en foreground depuis votre terminal :

mousepad

(pour reprendre la main, vous pouvez interrompre ce processus avec Ctrl+z, ensuite, fg lui redonne la main en avant-plan, bg lui redonne la main en arrière-plan) ou bien en background :

mousepad &

Les commandes à connaître sont ps, top, kill et pstree. On pourra aussi essayer htop pour un top plus joli.

  1. Après avoir consulté les pages de manuel des commandes précitées, lancez top, identifiez les éléments du contexte d’exécution. À quoi correspond la colonne TIME ?

  2. Afficher l’arbre des processus avec pstree. Lui faire afficher les PID. Quel est le PID de la racine (nommée init ou systemd) ?

  3. Utilisez la commande ps après avoir lancé gnome-calculator &

  4. Peut-on afficher tous les processus vous appartenant ?

  5. Peut-on afficher uniquement les processus appartenant à root ?

  6. Avec ps, affichez tous les processus tournant sur le système.

  7. Affichez les processus lancés sous forme longue (beaucoup d’informations).

  8. Lancez wireshark. Pouvez-vous utiliser le shell ? Interrompez wireshark. Pouvez-vous utiliser le shell ? Pouvez-vous utiliser wireshark ? Faites passer wireshark en arrière plan.

  9. Lancez ristretto &. Le stopper à l’aide de la commande kill. Le tuer.

  10. Que fait la commande kill -9 -1 ? (Pensez à sauvegarder votre compte-rendu avant de tester cette commande)

  11. Pouvez-vous tuer init ? D’autres processus.

  12. (VM) À l’aide de sudo su, devenez sysadm. Peut-il tuer les processus de robert et inversement ?

  13. Décrivez les différents signaux, leur nom, leur numéro et à quoi ils servent.

  14. Lancez un terminal en arrière-plan, depuis ce terminal, lancez mousepad et gnome-calculator en arrière-plan. À l’aide de pstree, affichez l’arborescence des processus. Repérez les programmes que vous avez lancés (xterm, ristretto, wireshark, mousepad). Quels sont leurs PID et PPID ?

  15. Depuis un autre terminal, tuez le xterm précédemment lancé. Que deviennent ses fils ?

  16. Depuis un terminal, lancez un xterm et interrompez le. Faites le reprendre à l’aide de la commande kill.

  17. Lancez plusieurs xterm. Testez la commande killall xterm. Peut-on envoyer un signal particulier avec killall.

  18. À l’aide de top, déterminez la commande utilisant le plus le processeur. Affichez le classement par ordre décroissant de consommation mémoire.

  19. Depuis top, envoyez le signal de TERM au processus qui consomme le plus de mémoire.

  20. La fonction jobs permet de connaître les tâches lancées depuis le shell courant. Exécutez cette commande et comparez son résultat à celui de la commande ps sans argument.

    $ jobs
    [1]    running    firefox tp4.html
    [2]  - running    xclock
    [3]  + running    xterm
  21. Dans le résultat précédent, le nombre entre crochets représente le numéro de job. Celui-ci (sous la forme %n) peut être utilisé comme raccourci pour les commandes utilisant des PIDs. Par exemple kill -15 %2 va envoyer le signal 15 au xclock.

  22. Il est possible de modifier la priorité des processus. Ainsi, on peut diminuer la priorité d’un processus gourmand en ressources pour laisser la place aux autres. Quelles commandes permettent de faire cela ?

  23. Lancez thunderbird avec une priorité faible.

Épilogue

Vu au cours de ce TP :

  • la gestion des processus ;
  • les commandes pstree, ps, kill

À venir : les redirections et les scripts.