Les commandes de base Le système de ficher des processus Procfs

publicité
Systèmes D’Exploitation I - 1ère année Licence
TP2 : Gestion des processus sous Linux
ESEN - Université de la Manouba
Amine DHRAIEF
Les commandes de base
1. Dans cette section nous étudions les interactions basiques avec des processus sous linux
(a) Listez les processus actifs en tapant $ps aux.
(b) Lancez l’éditeur de texte gedit en arrière plan en tapant $gedit&.
(c) Identifiez le PID de gedit en utilisant la commande $pidof gedit.
(d) Identifiez le PID de gedit en utilisant cette fois $ps aux | grep gedit.
(e) La commande kill permet d’envoyer un signal au processus. Affichez le manuel de
linux des signaux en tapant $man 7 signal. La commande kill permet d’envoyer
un signal au processus : kill -<numéro du signal ou nom du signal> <PID du
processus>.
(f) Les signaux les plus connus sont les trois suivants :
— SIGHUP (signal n◦ 1) : pour beaucoup de services réseaux, la réception du signal
n◦ 1 lui indique de lire sa configuration. Par exemple, cela permet d’indiquer au
processus apache (serveur web) de relire sa configuration, sans avoir a arrêter et
redémarrer le processus.
— SIGKILL (signal n◦ 9) : termine un processus (arrêt brutal). Utile lorsque le
SIGTERM ne marche pas (processus planté).
— SIGTERM (signal n◦ 15) : demande au processus de s’arrêter (arrêt propre).
Tuez gedit en utilisant la commande kill.
(g) Lancez xeyes sur votre terminal en tapant successivement trois fois $xeyes&. La
commande killall permet d’indiquer le nom du processus plutôt que son PID, et va
envoyer le signal à tous les processus possédant ce nom. Tuez toutes les instances
de xeyes en tapant $ killall xeyes.
(h) Utilisez la commande $pstree pour affiche les processus en cours d’exécution sous
la forme d’un arbre.
(i) Visualiser les PIDs des processus en utilisant la commande l’option -p avec la commande $pstree
Le système de ficher des processus Procfs (process file system)
2. Sur les systèmes du type Unix, procfs (process file system, système de fichiers processus
en anglais) est un pseudo-système de fichiers (pseudo car dynamiquement généré au démarrage) utilisé pour accéder aux informations du noyau sur les processus. Le système
de fichiers est souvent monté sur le répertoire /proc. Puisque /proc n’est pas une arborescence réelle, il ne consomme aucun espace disque mais seulement une quantité limitée
de mémoire vive. Cela aboutit à un paradoxe apparent : un fichier non vide a une taille
affichée de 0 (avec ls).
(a) Lancez gedit en arrière plan et identifiez son PID.
(b) Explorez le dossier relatif au PID de gedit (XXX) en utilisant la commande $ ls
/proc/XXX/.
(c) Identifiez le rôle des éléments suivants /proc/XXX/cwd/, /proc/XXX/status,
/proc/XXX/cmdline, /proc/XXX/limits, /proc/XXX/environ, /proc/XXX/fd/,
/proc/XXX/smaps
Gestion des processus d’un projet
Dans le cadre d’un projet fonctionnant à base de plugins, vous avez besoin de suivre la
consommation mémoire et éventuellement CPU liés aux plugins. Après avoir « bricolé »
avec les outils de bases (ps,top,...), le besoin s’est fait vite ressentir de pouvoir suivre ces
processus sur le long terme sans devoir prendre des mesures toutes les N minutes/heures
La commande free donne des indications sur le mémoire totale du système. Pour vérifier
si le projet ne surconsomme pas de mémoire, il est intéressant de vérifier l’état de la
mémoire avant le lancement des exécutable puis quelques temps après.
3. Que retourne $free et $free -m ?
La commande top permet d’afficher la liste des processus et de leur statut. Pour suivre
un processus particulier, on utilise $top -p PID
4. Suivez la consommation du processus init ?
Dans ce qui suit, nous allons utilisé la classe psutil de python pour monitorer un processus. Installez psutils avec la commande $sudo apt-get install python-psutil. Lancez
python en tapant simplement $python. Importez la classe psutils sous python en tapant :
import psutil. Testez psutil.get_pid_list(), psutil.pid_exists(1), psutil.pid_exists(9999)
et psutil.cpu_percent(1).
Page 2
5. Testez sous votre console pyhton : psutil.TOTAL_PHYMEM, psutil.NUM_CPUS, psutil.used_phymem(), psutil.avail_phymem(), psutil.used_virtmem(), psutil.avail_virtmem(),
psutil.used_virtmem(),
6. Commençons par instancier la classe Process pour un processus donnée. RSS : mémoire
utilisé par le processus est ses données et VSZ : quantité de mémoire utilisée par le
processus. Effectuez les tests décrit par la figure ci-dessous pour un processus de votre
choix.
Page 3
Téléchargement