Differences

This shows you the differences between two versions of the page.

Link to this comparison view

sde2:laboratoare:03_uso [2023/03/27 18:58]
alexandru.radovici
sde2:laboratoare:03_uso [2023/03/27 19:18] (current)
alexandru.radovici
Line 1: Line 1:
-====== TP - Installation et utilisation d'​applications ======+====== TP - Installation et utilisation d'​applications ======
  
 ===== Démarrage et arrêt des applications ===== ===== Démarrage et arrêt des applications =====
Line 14: Line 14:
  
 <code > <code >
-student@uso:​~$ ​who+student@uso:​~$ ​whox
 student ​ :0           ​2020-09-04 17:42 (:0) student ​ :0           ​2020-09-04 17:42 (:0)
 student ​ pts/0        2020-09-19 15:57 (192.168.56.1) student ​ pts/0        2020-09-19 15:57 (192.168.56.1)
Line 80: Line 80:
  
    * ''​%%watch ps%%''​ :​ pour surveiller les processus dans le terminal actuel    * ''​%%watch ps%%''​ :​ pour surveiller les processus dans le terminal actuel
 +
 +===== Exécuter des applications =====
 +
 +Démarrer une application signifie allouer des ressources système (processeur,​ mémoire, périphériques d'​entrée/​sortie) pour exécuter l'​application. Une application en cours d'​exécution,​ c'​est-à-dire utilisant des ressources système pour exécuter du code et traiter des données, est appelée un **processus**. Lorsque nous démarrons une application,​ un processus est créé ; quand on arrête l'​application,​ ou quand elle termine son exécution, on entend la fin de l'​exécution du processus.
 +
 +Le processus est démarré à partir d'un fichier exécutable qui contient le code de l'​application (instructions) et des données. Le fichier exécutable est également appelé **image de processus**. Le fichier exécutable est un **programme**. Nous disons que le processus est un programme en cours d'​exécution ((Le temps de création d'un processus à partir d'un fichier exécutable,​ en chargeant le code et les données du fichier exécutable en mémoire, est appelé ** temps de chargement **. Exécution du processus et l'​utilisation des ressources système s'​appelle **run-time**.
 +)).
 +
 +==== Identification du fichier exécutable d'une application ====
 +
 +Le fichier exécutable d'une application est chargé dans la mémoire système et le code est exécuté. à partir de ce moment, nous disons que l'​application est **en cours d'​exécution**.
 +
 +Par exemple, l'​application Firefox (navigateur web) a associé le fichier exécutable ''​%%/​usr/​bin/​firefox%%''​ ; l'​application Vim (éditeur) a un fichier exécutable associé ''​%%/​usr/​bin/​vim%%''​ ;​ l'​application LibreOffice (suite bureautique) a un fichier exécutable associé ''​%%/​usr/​bin/​libreoffice%%''​. On peut identifier le fichier exécutable d'une application à l'aide de la commande ''​%%which%%''​ suivi de la commande de lancement de l'​application comme ci-dessous :
 +
 +<code bash>
 +student@uso:​~$ which firefox
 +/​usr/​bin/​firefox
 +student@uso:​~$ which vim
 +/​usr/​bin/​vim
 +student@uso:​~$ which libreoffice
 +/​usr/​bin/​libreoffice
 +</​code>​
 +**Exercice** :​ Identifiez le fichier exécutable des applications/​utilitaires ''​python'',​ ''​vim'',​ ''​%%ls%%'',​ ''​%%df%%''​.
 +
 +==== Enquête de processus ====
 +
 +Un système d'​exploitation a généralement plusieurs applications en cours d'​exécution,​ donc plusieurs processus. Trop de processus peuvent surcharger le système, le ralentir ou l'​empêcher de fonctionner. Certains processus peuvent consommer des ressources excessives affectant d'​autres processus. C'est pourquoi il est utile d'​étudier les processus d'un système et leur consommation de ressources.
 +
 +Un processus est créé par un autre processus. Par exemple, ci-dessus, le processus ''​%%which%%''​ a été créé à partir d'un processus shell (''​%%bash%%''​). Le processus shell a été à son tour créé par un autre processus. Un processus a un processus parent ; un processus peut avoir plusieurs processus enfants. Les processus font donc partie d'une hiérarchie.
 +
 +Au sommet de la hiérarchie des processus se trouve le processus nommé classiquement ''​%%init%%''​. Dans la liste ci-dessus, nous voyons que le processus au sommet de la hiérarchie est ''​%%systemd%%''​. ''​%%systemd%%''​((https://​freedesktop.org/​wiki/​Software/​systemd/​)) est l'​implémentation de ''​%%init%%''​ présent dans la plupart des distributions Linux actuelles ((Le processus ''​%%init%%''​ existera toujours au sommet de la hiérarchie des processus, qu'il soit ou non être appelé ''​%%systemd%%'',​ ''​%%init%%'',​ ''​%%upstart%%''​ ou autrement.)).
 +
 +
 +=== Liste des processus ===
 +
 +Sur un plan plus didactique, nous pouvons visualiser la liste des processus d'un système. L'​utilitaire ''​%%ps%%''​ affiche les processus actuels du système (un //​instantané//​ des processus système). Lors d'une simple exécution, l'​utilitaire ''​%%ps%%''​ affiche les processus dans le terminal actuel :
 +
 +<code bash>
 +student@uso:​~$ ps
 +  PID TTY          TIME CMD
 +14897 pts/4    00:00:00 bash
 +14910 pts/4    00:00:00 ps
 +</​code>​
 +Dans le terminal courant (indiqué par la colonne ''​%%TTY%%''​ à l'​écran,​ c'​est-à-dire le terminal ''​%%pts/​4%%''​) il y a deux processus :
 +
 +   - le processus shell (''​%%bash%%''​) dans lequel nous exécutons des commandes qui créent de nouveaux processus ;​
 +   - le processus de listing (''​%%ps%%''​) que nous venons de lancer avec la commande ''​%%ps%%''​ ; il s'​affiche essentiellement
 +
 +Pour afficher tous les processus système, nous utilisons l'​option ''​%%-e%%''​ (pour //​everything//​) de l'​utilitaire ''​%%ps%%''​ comme dans la commande ci-dessous :​
 +
 +<code bash>
 +student@uso:​~$ ps -e
 +  PID TTY          TIME CMD
 +    1 ?        00:00:19 systemd
 +    2 ?        00:00:00 kthreadd
 +    4 ?        00:00:00 kworker/​0:​0H
 +    6 ?        00:00:00 mm_percpu_wq
 +    7 ?        00:00:09 ksoftirqd/0
 +    8 ?        00:00:06 rcu_sched
 +    9 ?        00:00:00 rcu_bh
 +   10 ?        00:00:00 migration/0
 +   11 ?        00:00:00 watchdog/0
 +[...]
 +</​code>​
 +
 +==== Attributs de processus ====
 +
 +L'​utilitaire ''​%%ps%%''​ a un affichage tabulaire des processus, chaque colonne correspondant à un attribut des processus. Dans un run simple, comme nous l'​avons vu plus haut, quatre colonnes sont affichées :
 +
 +   * ''​%%PID%%''​ : représentant l'​identifiant du processus
 +   * ''​%%TTY%%''​ :​ le terminal dans lequel le processus s'​exécute (apparaît ''​%%?​%%''​ pour un processus qui n'a pas de terminal - généralement des processus de type service, également appelés processus démons , n'ont pas de terminal)
 +   * ''​%%TIME%%''​ : temps d'​exécution sur le CPU (en heures, minutes, secondes)
 +   * ''​%%CMD%%''​ : le nom de l'​image du processus (c'​est-à-dire le nom de l'​exécutable/​programme à partir duquel le processus a été créé)
 +
 +=== Identification d'un processus ===
 +
 +''​%%PID%%''​ (//Process Id//) est l'​attribut essentiel du processus, un index qui identifie le processus au niveau du système. Un processus est identifié par son PID, et non par son nom d'​exécutable (''​%%CMD%%''​). Nous pouvons avoir plusieurs processus créés à partir du même exécutable,​ chaque processus ayant son propre PID ((Il est incorrect de dire "​processus bash"​ ;​ le bon est "un processus créé à partir du programme/​exécutable bash" ou "​processus avec PID XY" Cependant, nous utiliserons généralement l'​expression "​processus bash" car il ressort clairement du contexte de quel processus nous parlons.
 +)).
 +
 +Pour vérifier plusieurs processus, nous allons créer plusieurs processus shell. Pour commencer, nous ouvrons plusieurs sessions de terminal, en utilisant, par exemple, ''​%%Alt+F2%%''​ dans l'​environnement graphique et en entrant la commande ''​%%gnome-terminal%%''​ dans l'​invite créée. Ensuite, nous ne visualisons que les processus créés à partir de l'​exécutable ''​%%bash%%''​ en exécutant la commande :
 +
 +<code bash>
 +student@uso:​~$ ps -e | grep bash
 + 2181 pts/1    00:00:00 bash
 + 2194 pts/2    00:00:00 bash
 + 2205 pts/3    00:00:00 bash
 +14750 pts/0    00:00:00 bash
 +14897 pts/4    00:00:00 bash
 +</​code>​
 +On obtient un résultat comme ci-dessus. Il y a cinq processus, tous créés à partir de l'​exécutable ''​%%bash%%'',​ avec cinq PID différents :​ ''​%%2181%%'',​ ''​%%2194%%'',​ ''​%%2205 ''​ %%'',​ ''​%%14705%%'',​ ''​%%14879%%''​.
 +
 +=== Afficher les attributs d'un processus ===
 +
 +Un processus a plus que les quatre attributs affichés dans une simple exécution de l'​utilitaire ''​%%ps%%''​. Pour afficher plus d'​attributs,​ nous utilisons l'​option ''​%%-f%%''​ (du //format complet//) ou l'​option ''​%%-F%%''​ (du //format extra complet// ), comme ci-dessous :​
 +
 +<code bash>
 +student@uso:​~$ ps -f
 +UID        PID  PPID  C STIME TTY          TIME CMD
 +student ​ 14897 14896  0 17:12 pts/4    00:00:00 -bash
 +student ​ 15026 14897  0 17:46 pts/4    00:00:00 ps -f
 +
 +student@uso:​~$ ps -F
 +UID        PID  PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
 +student ​ 14897 14896  0  6056  5136   0 17:12 pts/4    00:00:00 -bash
 +student ​ 15027 14897  0  9728  3340   0 17:46 pts/4    00:00:00 ps -F
 +</​code>​
 +Bien sûr, nous pouvons combiner ces options avec l'​option ''​%%-e%%''​ pour afficher tous les processus :​
 +
 +<code bash>
 +student@uso:​~$ ps -ef
 +UID        PID  PPID  C STIME TTY          TIME CMD
 +root         ​1 ​    ​0 ​ 0 Aug18 ?        00:00:19 /​lib/​systemd/​systemd --system --deserialize 39
 +root         ​2 ​    ​0 ​ 0 Aug18 ?        00:00:00 [kthreadd]
 +root         ​4 ​    ​2 ​ 0 Aug18 ?        00:00:00 [kworker/​0:​0H]
 +root         ​6 ​    ​2 ​ 0 Aug18 ?        00:00:00 [mm_percpu_wq]
 +root         ​7 ​    ​2 ​ 0 Aug18 ?        00:00:09 [ksoftirqd/​0]
 +root         ​8 ​    ​2 ​ 0 Aug18 ?        00:00:06 [rcu_sched]
 +root         ​9 ​    ​2 ​ 0 Aug18 ?        00:00:00 [rcu_bh]
 +root        10     ​2 ​ 0 Aug18 ?        00:00:00 [migration/​0]
 +root        11     ​2 ​ 0 Aug18 ?        00:00:00 [watchdog/​0]
 +[...]
 +</​code>​
 +Les options ''​%%-f%%''​ et ''​%%-F%%''​ affichent également d'​autres attributs du processus, tels que :
 +
 +   * ''​%%UID%%''​ : le nom de l'​utilisateur propriétaire du processus
 +   * ''​%%PPID%%''​ : identifiant du processus parent
 +   * ''​%%C%%''​ :​ pourcentage d'​occupation du processeur
 +   * ''​%%STIME%%''​ :​ heure de début (//heure de début//)
 +   * ''​%%RSS%%''​ :​ mémoire RAM occupée (//taille de l'​ensemble résident//​)
 +
 +De tels attributs sont utiles pour voir quels processus consomment le plus de ressources (par exemple CPU ou mémoire).
 +
 +==== Surveillance du processus ====
 +
 +L'​utilitaire ''​%%ps%%''​ affiche les processus et leurs attributs à un instant donné, un //​instantané//​ des processus système. Souvent on s'​intéresse aussi à l'​évolution des processus dans le temps : évolution de la consommation des ressources, émergence de nouveaux processus. Autrement dit, pour surveiller les processus. La surveillance des processus consiste à obtenir périodiquement des informations sur les processus.
 +
 +Évidemment,​ un moyen simple de surveiller est d'​exécuter périodiquement l'​utilitaire ''​%%ps%%''​. Il existe cependant des utilitaires dédiés à la surveillance.
 +
 +=== Surveillance en utilisant top ===
 +
 +L'​utilitaire ''​%%top%%''​ est l'​utilitaire de surveillance de processus de base dans le monde Linux. C'est l'​équivalent du Gestionnaire des tâches de Windows. L'​exécution de ''​%%top%%''​ conduit à afficher, dans le terminal, les processus du système et à rafraîchir périodiquement les informations (par défaut ''​%%2%%''​ secondes). L'​image ci-dessous est une fenêtre de terminal exécutant ''​%%top%%''​ :​
 +
 +{{:​uso:​laboratoare:​laborator-02:​top.png?​500|Le meilleur utilitaire}}
 +
 +''​%%top%%''​ affiche des informations périodiques sur les processus **et** sur l'​état du système : CPU, consommation de mémoire. A chaque période (par défaut ''​%%2%%''​ secondes) les informations affichées sont rafraîchies.
 +
 +<​notes>​
 +La sortie de l'​utilitaire ''​%%top%%''​ se fait à l'aide de la touche ''​%%q%%''​((''​%%top%%''​ est un utilitaire interactif. C'​est-à-dire lors de son exécution l'​utilisateur peut interagir avec les processus ou modifier les informations affichées. Par exemple, l'​utilisation de la touche ''​%%M%%''​ dans une exécution ''​%%top%%''​ affiche les processus triés par consommation de mémoire. Un résumé des commandes interactives du ''​ %%top%%''​ s'​obtient à l'aide de la touche ''​%%?​%%''​.
 +)).
 +</​note>​
 +
 +==== Arrêt des processus. Signaux ====
 +
 +=== Utiliser des signaux pour tuer les processus ===
 +
 +Pour terminer de force (tuer) un processus, nous utilisons des signaux. Un signal est une notification envoyée par l'​utilisateur ou le système d'​exploitation à un processus. Un signal n'est pas nécessaire pour tuer le processus de réception, mais c'est le comportement le plus courant et la principale utilisation des signaux.
 +
 +Pour envoyer un signal à un processus nous avons besoin de connaître son PID et nous utilisons l'​utilitaire ''​%%kill%%''​ suivi du PID du processus. Autrement dit, si nous démarrons un processus ''​%%sleep%%''​ dans un terminal en utilisant la commande ci-dessous :​
 +
 +<code bash>
 +student@uso:​~$ sleep 60
 +</​code>​
 +dans un autre terminal, nous trouverons son PID (en utilisant ''​%%pidof%%''​):​
 +
 +<code bash>
 +student@uso:​~$ pidof sleep
 +9486
 +</​code>​
 +puis nous le tuerons (en utilisant ''​%%kill%%''​):​
 +
 +<code bash>
 +student@uso:​~$ kill -SIGKILL 9486
 +</​code>​
 +La commande ''​%%kill%%''​ reçoit en argument le PID du processus à tuer, soit ''​%%9486%%''​.
 +
 +Nous vérifions à nouveau s'il existe un processus ''​%%sleep%%''​ utilisant ''​%%pidof%%''​ :​
 +
 +<code bash>
 +student@uso:​~$ pidof sleep
 +student@uso:​~$
 +</​code>​
 +Nous voyons d'​après la sortie que le processus "​%%sleep%%"​ n'​existe plus, il a donc été tué.
 +
 +Dans le terminal initial, où j'ai exécuté la commande ''​%%sleep%%'',​ un message apparaît indiquant que le processus a été tué :
 +
 +<code bash>
 +student@uso:​~$ sleep 60
 +Killed
 +</​code>​
 +
 +=== Exercices :​ Arrêter les processus ===
 +
 +   * Démarrez trois processus ''​%%sleep%%''​ dans trois terminaux différents. Tuez-les tous avec une seule commande. Le PID du shell actuel peut être trouvé à l'aide de la commande :
 +
 +<code bash>
 +student@uso:​~$ echo $$
 +9477
 +</​code>​
 +
 +   * Tuez le shell actuel.
 +   * Démarrez une application ''​%%python%%''​. Démarrez une application ''​%%vim%%''​. Tuez ces processus en utilisant l'​utilitaire ''​%%kill%%''​.
 +
 +**Notes de bas de page**
sde2/laboratoare/03_uso.1679932707.txt.gz · Last modified: 2023/03/27 18:58 by alexandru.radovici
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0