La gestion des processus Linux est une compétence fondamentale pour tout administrateur système — que vous traquiez un processus qui consomme abusivement le CPU, que vous arrêtiez proprement un démon défaillant ou que vous ajustiez la priorité d’un traitement par lot, savoir inspecter et contrôler les processus maintient les systèmes en bonne santé. Ce guide couvre la boîte à outils complète : ps aux, top, htop, les signaux kill, nice/renice, les jobs en arrière-plan et le système de fichiers /proc, avec des exemples pratiques utilisables immédiatement.
Prérequis
- Un système Linux (toute distribution — Ubuntu, Debian, RHEL, Fedora, Arch)
- Accès à un terminal avec un compte utilisateur standard (certaines commandes nécessitent
sudo) htopinstallé (apt install htopoudnf install htop) pour la section htop- Familiarité de base avec la ligne de commande
Lister les processus avec ps
ps (process status) est l’outil classique de capture instantanée. Il lit /proc et affiche l’état des processus au moment où vous l’exécutez — contrairement à top, il ne se rafraîchit pas.
ps aux — syntaxe BSD
ps aux
| Colonne | Signification |
|---|---|
| USER | Propriétaire du processus |
| PID | Identifiant du processus |
| %CPU | Utilisation CPU depuis le démarrage du processus |
| %MEM | Mémoire résidente en % de la RAM totale |
| VSZ | Taille de la mémoire virtuelle (Ko) |
| RSS | Taille de l’ensemble résident — RAM réellement utilisée (Ko) |
| STAT | État du processus (R=en cours, S=en attente, Z=zombie, T=arrêté) |
| COMMAND | Ligne de commande complète |
Trier par CPU et afficher les pires consommateurs :
ps aux --sort=-%cpu | head -20
ps aux --sort=-%mem | head -20
Rechercher des processus par nom sans que grep n’apparaisse dans les résultats :
ps aux | grep '[n]ginx'
ps -ef — syntaxe UNIX
ps -ef
ps -ef ajoute la colonne PPID (PID parent), indispensable pour tracer les arbres de processus. Utilisez -eH ou --forest pour une vue en arborescence :
ps -eH
ps -ef --forest
Décodage des états de processus
- R — exécutable (sur CPU ou dans la file d’attente)
- S — sommeil interruptible (en attente d’E/S ou d’un événement)
- D — sommeil non interruptible (généralement E/S disque — ne peut pas être tué)
- Z — zombie (terminé mais le parent ne l’a pas récupéré)
- T — arrêté (Ctrl+Z ou SIGSTOP)
Un nombre élevé de processus en état D indique une saturation des E/S. Les zombies Z sont inoffensifs en petit nombre mais signalent un parent qui n’appelle pas wait().
Surveillance interactive avec top
top offre une vue en direct avec rafraîchissement automatique (intervalle par défaut de 3 secondes). Lancez-le, puis utilisez ces raccourcis clavier :
| Touche | Action |
|---|---|
P | Trier par utilisation CPU |
M | Trier par utilisation mémoire |
T | Trier par temps CPU cumulé |
k | Demander un PID à tuer |
r | Renommer la priorité d’un processus |
1 | Basculer vers la vue par cœur CPU |
u | Filtrer par nom d’utilisateur |
f | Ouvrir le gestionnaire de champs (ajouter/supprimer des colonnes) |
q | Quitter |
d | Modifier l’intervalle de rafraîchissement (secondes) |
H | Afficher les threads individuels plutôt que les processus |
L’en-tête résume les moyennes de charge (1, 5, 15 minutes), la répartition CPU (us/sy/id/wa) et la mémoire. Un wa (attente E/S) supérieur à 10-15 % indique généralement un goulot d’étranglement au niveau du stockage.
Exécuter top de façon non interactive pour capturer une instantané :
top -bn1 | head -30
Surveillance avancée des processus avec htop
htop est un top avec une interface colorée, le support de la souris et des commandes plus intuitives. Après l’installation et le lancement, la barre de touches de fonction en bas vous guide :
| Touche | Action |
|---|---|
F2 | Configuration (couleurs, colonnes, jauges) |
F3 | Rechercher dans la liste des processus |
F4 | Filtrer (n’afficher que les processus correspondants) |
F5 | Vue en arbre (hiérarchie des processus) |
F6 | Sélecteur de colonne de tri |
F9 | Envoyer un signal au processus sélectionné |
F10 | Quitter |
| Touches fléchées | Naviguer dans la liste des processus |
Espace | Marquer un processus pour action groupée |
htop affiche des barres CPU par cœur, des barres de mémoire et de swap, et permet de faire défiler horizontalement pour voir les lignes de commande longues — tout ce que top nécessite des frappes supplémentaires pour révéler.
Comparaison des outils de gestion des processus
| Fonctionnalité | ps | top | htop | pgrep/pkill |
|---|---|---|---|---|
| Rafraîchissement en direct | Non | Oui | Oui | Non |
| Support souris | Non | Limité | Oui | Non |
| Vue en arbre | Option --forest | Non | F5 | Non |
| Envoi de signaux | Non | Touche k | F9 | Directement |
| Filtrer/rechercher | Pipe vers grep | Touche u | F4/F3 | Par motif/regex |
| Sortie colorée | Non | Basique | Riche | Non |
| Adapté aux scripts | Excellent | Médiocre | Médiocre | Excellent |
| Installation requise | Intégré | Intégré | Oui | Intégré |
Utilisez ps et pgrep/pkill dans les scripts ; utilisez top ou htop de façon interactive sur les serveurs.
Envoi de signaux : kill, pkill, killall
Les signaux sont le principal mécanisme IPC pour le contrôle des processus. Les plus importants :
| Signal | Numéro | Action par défaut | Cas d’utilisation |
|---|---|---|---|
| SIGTERM | 15 | Arrêt propre | Arrêt normal — permet le nettoyage |
| SIGKILL | 9 | Tuer immédiatement | Le processus ignore SIGTERM |
| SIGHUP | 1 | Rechargement config | Indiquer aux démons de relire la config |
| SIGSTOP | 19 | Pause (non bloquable) | Suspendre un processus |
| SIGCONT | 18 | Reprendre | Reprendre un processus suspendu |
| SIGUSR1/2 | 10/12 | Défini par l’utilisateur | Spécifique à l’application (ex. rotation de logs) |
kill par PID
kill 1234 # SIGTERM — demander poliment
kill -15 1234 # SIGTERM explicite
kill -9 1234 # SIGKILL — sans pitié
kill -HUP 1234 # recharger la configuration
kill -l # lister tous les noms de signaux
Essayez toujours SIGTERM en premier. Accordez 10 à 30 secondes au processus, puis escaladez vers SIGKILL si nécessaire.
pkill et pgrep — cibler par nom ou motif
pgrep nginx # lister les PIDs correspondant à "nginx"
pgrep -u www-data nginx # restreindre à un utilisateur spécifique
pkill nginx # SIGTERM à tous les processus correspondants
pkill -9 nginx # SIGKILL à tous les correspondants
pkill -HUP nginx # recharger la config nginx (identique à kill -HUP $(pgrep nginx))
killall — tuer toutes les instances par nom exact
killall firefox
killall -9 java
killall -u jcarlos # tuer tous les processus appartenant à un utilisateur
pkill accepte les regex et les correspondances partielles ; killall exige le nom exact du processus. Préférez pkill dans les scripts.
Réglage de la priorité avec nice et renice
Linux ordonnance les processus en utilisant une valeur de politesse allant de -20 (priorité la plus haute, le moins poli envers les autres) à 19 (priorité la plus basse). La valeur par défaut est 0. Seul root peut définir des valeurs négatives.
nice — définir la priorité au lancement
nice -n 19 tar -czf backup.tar.gz /var/data # sauvegarde en arrière-plan, faible priorité
nice -n -5 ./realtime-processor # priorité plus haute (nécessite sudo)
sudo nice -n -10 ./critical-task
renice — ajuster un processus en cours
renice -n 10 -p 1234 # réduire la priorité du PID 1234
sudo renice -n -5 -p 1234 # augmenter la priorité (root requis)
renice -n 15 -u jcarlos # réduire la priorité de tous les processus de l'utilisateur
Vérifier la politesse actuelle avec ps :
ps -o pid,ni,comm -p 1234
Jobs en arrière-plan : bg, fg et jobs
Le contrôle des jobs du shell vous permet de gérer plusieurs tâches sans ouvrir de terminaux supplémentaires.
long-running-command & # démarrer directement en arrière-plan
./script.sh # s'exécute au premier plan
# appuyer sur Ctrl+Z pour suspendre
[1]+ Stopped ./script.sh
jobs # lister les jobs
# [1]+ Stopped ./script.sh
# [2]- Running long-running-command &
bg %1 # reprendre le job 1 en arrière-plan
fg %1 # ramener le job 1 au premier plan
fg %2 # ramener le job 2 au premier plan
disown %1 # détacher le job du shell (survit à la déconnexion)
nohup ./script.sh & # immunisé contre SIGHUP, sortie dans nohup.out
& et bg lient toujours le processus à la session du terminal. Utilisez nohup, screen ou tmux pour les jobs devant survivre à une déconnexion.
Explorer /proc
Tout ce que savent ps et top provient du système de fichiers virtuel /proc — une fenêtre en direct sur la table des processus du noyau.
ls /proc/1234/ # tous les fichiers pour le PID 1234
cat /proc/1234/status # statut lisible (Name, State, VmRSS, Threads…)
cat /proc/1234/cmdline # ligne de commande complète (séparée par des caractères nuls)
cat /proc/1234/environ # variables d'environnement au lancement
ls -l /proc/1234/fd/ # descripteurs de fichiers ouverts (sockets, pipes, fichiers)
cat /proc/1234/maps # carte mémoire
cat /proc/self/status # informations sur le processus shell courant
Fichiers /proc utiles au niveau système :
cat /proc/loadavg # charge sur 1m, 5m, 15m + processus en cours/total
cat /proc/meminfo # statistiques mémoire détaillées
cat /proc/cpuinfo # détails CPU par cœur
cat /proc/uptime # durée de fonctionnement du système en secondes
Scénario réel : Pic CPU sur un serveur de production
Vous avez un serveur web de production qui atteint soudainement 100% de CPU. Voici le plan d’action :
# 1. Identifier le coupable
ps aux --sort=-%cpu | head -10
# 2. Obtenir plus de détails (fichiers ouverts, connexions réseau)
PID=<pid du processus fautif>
ls -l /proc/$PID/fd | wc -l # nombre de descripteurs de fichiers
cat /proc/$PID/status # vérifier les threads, la mémoire
cat /proc/$PID/cmdline # commande exacte
# 3. Essayer d'abord un arrêt propre
kill -15 $PID
sleep 15
# 4. Vérifier s'il s'est arrêté
ps -p $PID
# 5. Forcer l'arrêt si toujours en cours
kill -9 $PID
# 6. S'il s'agit d'un service, redémarrer proprement
sudo systemctl restart myapp
Si le processus est un démon connu, kill -HUP peut suffire pour effacer un état bloqué sans redémarrage complet.
Pièges et Cas Particuliers
SIGKILL ne peut pas être intercepté ni ignoré. Un processus en sommeil non interruptible (état D, en attente d’E/S) ne répondra pas à SIGKILL tant que l’E/S n’est pas terminée. Dans ce cas, le périphérique sous-jacent ou le montage NFS est généralement le problème.
Les processus zombies ne sont pas une fuite. Un zombie (état Z) retient un PID mais aucune ressource. Il disparaît quand le parent appelle wait(). Si des zombies s’accumulent, le processus parent est défaillant — tuer le parent ou le corriger est la solution, pas tuer le zombie directement.
Le %CPU de ps est une moyenne sur la durée de vie, pas actuel. Le %CPU dans ps aux est calculé sur la durée de vie du processus. Un processus qui a eu un pic hier et est maintenant inactif affiche un faible pourcentage. Utilisez top ou htop pour le CPU en temps réel.
nice nécessite root pour les valeurs négatives. Les utilisateurs normaux peuvent uniquement augmenter la politesse (réduire la priorité). Saisir nice -10 par erreur (que bash interprète comme le drapeau -1 0) est une erreur courante — utilisez toujours nice -n 10.
pkill fait correspondre des sous-chaînes. pkill python tuera python3, python2 et tout processus contenant “python” dans son nom — y compris votre éditeur s’il embarque un interpréteur Python. Utilisez pgrep d’abord pour vérifier ce qui sera ciblé.
Le contrôle des jobs est par shell. jobs n’affiche que les jobs démarrés dans la session shell courante. Utilisez ps aux | grep commande pour trouver les processus détachés.
Résolution de Problèmes
“Operation not permitted” lors de la tentative de tuer un processus — vous essayez de tuer un processus appartenant à un autre utilisateur ou un processus root. Utilisez sudo kill PID.
Le processus redémarre immédiatement après la mort — un superviseur (systemd, supervisord, Docker) le redémarre. Arrêtez le service avec sudo systemctl stop nom-service à la place.
kill -9 ne fonctionne pas — le processus est en état D (sommeil non interruptible). Vérifiez iostat -x 1 pour l’attente E/S ; le périphérique de bloc ou le système de fichiers réseau est bloqué. Un redémarrage peut être nécessaire dans les cas extrêmes.
htop montre une utilisation du swap qui augmente — votre système manque de mémoire. Utilisez ps aux --sort=-%mem | head -10 pour trouver les plus gros consommateurs et envisagez d’ajouter du swap ou de redémarrer l’application fautive.
Charge moyenne élevée mais faible utilisation CPU — les processus attendent des E/S, pas le CPU. Vérifiez iostat, iotop et le nombre de processus en état D avec ps aux | awk '$8 ~ /D/ {print}'.
Résumé
ps auxdonne une instantané triée par CPU ou mémoire ; utilisez--forestpour une vue en arbre.topethtopoffrent une surveillance en direct ;htopajoute la couleur, le support souris et les raccourcis par touches de fonction.- Signaux : essayez toujours SIGTERM (15) en premier, escaladez vers SIGKILL (9) uniquement si nécessaire ; SIGHUP (1) recharge la plupart des démons.
pkill/pgrepsont des alternatives adaptées aux scripts pourkillquand vous connaissez un nom plutôt qu’un PID.nice/reniceajustent la priorité d’ordonnancement (-20 à 19) ; les valeurs négatives nécessitent root.bg/fg/jobsgèrent le contrôle des jobs du shell ; utiliseznohupoutmuxpour survivre à une déconnexion./proc/<PID>/est la source de vérité —status,cmdline,fd/etmapsrévèlent tout sur un processus en cours.