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), 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 :
/Applications/Notes.app/Contents/MacOS/Notes
(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 :
/Applications/Notes.app/Contents/MacOS/Notes &
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 ? La commande pstree n’est pas disponible sur les mac. Connectez-vous sur un serveur Unix à l’aide de votre nom (ici par exemple si votre nom est claudel).
ssh claudel@194.167.209.99
Cette commande va ouvrir un shell sur la machine en question. Vous devez répondre yes à la première question, puis taper votre mot de passe (votre nom) quand il vous est demandé (le mot de passe n’apparaît pas quand vous le tapez, ce qui est normal).
Avec la commande
pstree
, affichez l’arbre des processus. Affichez les pid des processus dans l’arbre. Quel est le pid de la racine (normalement nomméeinit
) ?Pour vous déconnecter du serveur, tapez la commande suivante :
exit
- Utilisez la commande
ps
après avoir lancé/Applications/Calendar.app/Contents/MacOS/Calendar &
- 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
/Applications/Notes.app/Contents/MacOS/Notes
. Pouvez-vous utiliser le shell ? Interrompez Notes. Pouvez-vous utiliser le shell ? Pouvez-vous utiliser Notes ? Faites passer orage en arrière plan. - Lancez
/Applications/TextEdit.app/Contents/MacOS/TextEdit &
. Stoppez-le à 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. - À l’aide de
su
, laissez votre voisin se connecter sur votre machine. Peut-il tuer vos processus et inversement ? - Décrivez les différents signaux, leur nom, leur numéro et à quoi ils servent.
- Lancez Notes et Calendar en arrière-plan, depuis un terminal, créez une nouvelle fenêtre de Terminal avec ⌘+n. Lancez Textedit depuis cette nouvelle fenêtre. À l’aide de
ps
, affichez les processus. Repérez les programmes que vous avez lancés (Notes, Calendar, Textedit). Dessinez l’arbre de ces processus (en fonction des PID et PPID) en précisant les PID. - Depuis un autre terminal, tuez le
bash
père de Notes et Calendar. Que deviennent ses fils ? - Depuis un terminal, lancez un programme et interrompez le. Faites le reprendre à l’aide de la commande
kill
. - À 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 midori 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 ?
Lancer
/Application/Firefox.app/Contents/MacOS/firefox
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.