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.
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 ?Afficher l’arbre des processus avec
pstree
. Lui faire afficher les PID. Quel est le PID de la racine (nommée init ou systemd) ?Utilisez la commande
ps
après avoir lancégnome-calculator &
Peut-on afficher tous les processus vous appartenant ?
Peut-on afficher uniquement les processus appartenant à root ?
Avec
ps
, affichez tous les processus tournant sur le système.Affichez les processus lancés sous forme longue (beaucoup d’informations).
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.Lancez
ristretto &
. Le stopper à l’aide de la commande kill. Le tuer.Que fait la commande
kill -9 -1
? (Pensez à sauvegarder votre compte-rendu avant de tester cette commande)Pouvez-vous tuer
init
? D’autres processus.(VM) À l’aide de
sudo su
, devenezsysadm
. Peut-il tuer les processus de robert et inversement ?Décrivez les différents signaux, leur nom, leur numéro et à quoi ils servent.
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 ?Depuis un autre terminal, tuez le
xterm
précédemment lancé. Que deviennent ses fils ?Depuis un terminal, lancez un xterm et interrompez le. Faites le reprendre à l’aide de la commande
kill
.Lancez plusieurs xterm. Testez la commande
killall xterm
. Peut-on envoyer un signal particulier avec killall.À l’aide de
top
, déterminez la commande utilisant le plus le processeur. Affichez le classement par ordre décroissant de consommation mémoire.Depuis
top
, envoyez le signal de TERM au processus qui consomme le plus de mémoire.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 commandeps
sans argument.$ jobs [1] running firefox tp4.html [2] - running xclock [3] + running xterm
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 exemplekill -15 %2
va envoyer le signal 15 au xclock.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 ?
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.