Atelier - Gestion des processus en shell Bash
Sur les OS GNU/Linux, l’administration en ligne de commande est une compétence fondamentale. La gestion des processus via le shell Bash permet d’optimiser, diagnostiquer et contrôler l’exécution des programmes sur un système.
1. Prérequis
- Un ordinateur ou une VM tournant sous GNU/Linux (Debian, Ubuntu ou équivalent)
- Un terminal Bash
- Les droits sudo pour certaines opérations avancées
DISCLAIMER
Les expérimentations pratiques ont été réalisées sur une machine virtuelle Ubuntu 24.04 LTS, sur un système en français, avec un clavier Français AZERTY.
Cette VM est hébergée sur VirtualBox, tournant sur un système hôte Ubuntu 2404 LTS.
Elles peuvent être reproduites avec une autre configuration (autre version de Linux, autre hyperviseur, autre OS hôte), mais des différences peuvent alors apparaître et tu devras peut-être adapter les actions à effectuer.
2. Affichage des processus
Les processus sont des programmes en cours d’exécution. Chaque processus possède un identifiant unique : le PID (Process ID).
Pour la suite, ouvre un terminal Bash.
a. Afficher tous les processus
La commande ci-dessous affiche un instantané de tous les processus en cours d’exécution :
ps aux
La sortie de cette commande s’affiche avec les colonnes suivantes :
- USER : l’utilisateur propriétaire du processus
- PID : l’identifiant unique du processus
- %CPU : le pourcentage d’utilisation du processeur
- %MEM : le pourcentage d’utilisation de la mémoire RAM
- VSZ : la mémoire virtuelle utilisée par le processus (en Ko)
- RSS : la mémoire physique réellement occupée en RAM (en Ko)
- TTY : le terminal associé au processus (
?= aucun terminal, processus système) - STAT : l’état du processus (
R= Running,S= Sleeping,Z= Zombie,s= chef de session,+= processus en avant-plan) - START : l’heure ou la date de démarrage du processus
- TIME : le temps CPU cumulé consommé depuis le démarrage
- COMMAND : la commande qui a lancé le processus
Pour afficher uniquement les processus de l’utilisateur courant :
ps -u $USER
Pour afficher les processus sous forme d’arborescence (processus parent → enfant) :
ps auxf
b. Surveillance en temps réel
La commande top affiche les processus en temps réel, triés par consommation CPU :
top
Quelques raccourcis utiles dans top :
- q : quitter
- k : tuer un processus (demande le PID)
- M : trier par consommation mémoire
- P : trier par consommation CPU
Pour une version améliorée et plus lisible, utilise htop (à installer si absent) :
sudo apt install htop -y
htop
Comprends-tu la différence entre top et htop ?
topest natif sur tous les systèmes Linux et ne nécessite aucune installation.htopoffre une interface colorée, une navigation avec les flèches, et permet de tuer des processus directement sans saisir de PID.
c. Rechercher un processus par nom
Pour retrouver le PID d’un processus à partir de son nom, utilise pgrep.
Lance le navigateur Firefox, puis exécute la commande suivante :
pgrep firefox
Ou via un pipeline avec grep pour afficher plus de détails :
ps aux | grep firefox
3. Lancer et contrôler des processus
a. Lancer un processus en arrière-plan
Pour lancer un processus et laisser la main dans le terminal, ajoute & à la fin de la commande :
sleep 60 &
Le terminal affiche le numéro de job [1] et le PID du processus. La commande sleep 60 attend 60 secondes sans rien faire, ce qui est pratique pour s’entraîner.
Pour lister les processus en arrière-plan dans le terminal courant :
jobs
b. Passer un processus au premier plan
Si un processus tourne en arrière-plan, tu peux le ramener au premier plan avec fg :
fg %1
%1 correspond au numéro de job affiché par la commande jobs.
Pour le renvoyer en arrière-plan, appuie sur Ctrl+Z (mise en pause), puis :
bg %1
c. Modifier la priorité d’un processus
Le système Linux attribue une priorité à chaque processus via la valeur nice, de -20 (priorité maximale, réservée à root) à +19 (priorité minimale).
Lancer un processus avec une priorité basse (pour ne pas surcharger le système) :
nice -n 15 sleep 120 &
Modifier la priorité d’un processus déjà en cours avec renice (nécessite sudo pour augmenter la priorité) :
# Récupère d'abord le PID avec pgrep
pgrep sleep
# Puis modifie sa priorité
sudo renice -n 5 -p <PID>
La commande ps -o pid,ni,comm -p <PID> te permet de voir la colonne NI (Nice value) pour constater le changement.
4. Arrêter un processus
a. Arrêt propre avec kill
La commande kill envoie un signal à un processus. Le signal par défaut est SIGTERM (15), qui demande au processus de s’arrêter proprement :
kill <PID>
Par exemple, pour tuer le processus sleep lancé précédemment :
# Récupère le PID
pgrep sleep
# Envoie le signal d'arrêt
kill <PID>
b. Arrêt forcé
Si un processus ne répond pas au signal SIGTERM, utilise le signal SIGKILL (9), qui force l’arrêt immédiat :
kill -9 <PID>
Ou avec le nom du processus directement grâce à killall :
killall sleep
Attention :
killalltue tous les processus portant ce nom. À utiliser avec précaution.
c. Arrêt par nom avec pkill
pkill combine la recherche et l’arrêt en une seule commande :
pkill sleep
Comme pour le lancement d’un processus, il existe plusieurs façons d’arriver au même résultat.
Comprends-tu la différence entre kill, killall et pkill ?
killagit sur un PID spécifique et nécessite de connaître le numéro de processus.killallcible tous les processus portant un nom exact.pkillaccepte un motif partiel de nom, ce qui le rend plus flexible mais aussi plus risqué.
5. Analyse des ressources système
a. Utilisation de la mémoire
Pour afficher l’utilisation globale de la mémoire RAM et du swap :
free -h
L’option -h affiche les valeurs dans un format lisible (Mo, Go).
b. Informations détaillées sur un processus
Pour obtenir toutes les informations sur un processus spécifique à partir de son PID :
cat /proc/<PID>/status
Le répertoire /proc/<PID>/ est un répertoire virtuel géré par le noyau Linux qui contient en temps réel toutes les informations du processus.
Pour afficher uniquement la consommation mémoire d’un processus :
cat /proc/<PID>/status | grep VmRSS
VmRSS correspond à la mémoire physique réellement utilisée par le processus (Resident Set Size).
Une fois arrivé au bout de cet atelier, tu as une première approche solide de la gestion des processus en Bash sous GNU/Linux.