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.

  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. 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ée init) ?

    Pour vous déconnecter du serveur, tapez la commande suivante :

    exit
  3. Utilisez la commande ps après avoir lancé /Applications/Calendar.app/Contents/MacOS/Calendar &

  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 /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.

  9. Lancez /Applications/TextEdit.app/Contents/MacOS/TextEdit &. Stoppez-le à 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. À l’aide de su, laissez votre voisin se connecter sur votre machine. Peut-il tuer vos processus et inversement ?

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

  14. 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.

  15. Depuis un autre terminal, tuez le bash père de Notes et Calendar. Que deviennent ses fils ?

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

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

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

  19. 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    midori tp4.html
    [2]  - running    xclock
    [3]  + running    xterm
  20. 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.

  21. 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 ?

  22. 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.