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