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)
  • htop installé (apt install htop ou dnf 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
ColonneSignification
USERPropriétaire du processus
PIDIdentifiant du processus
%CPUUtilisation CPU depuis le démarrage du processus
%MEMMémoire résidente en % de la RAM totale
VSZTaille de la mémoire virtuelle (Ko)
RSSTaille 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é)
COMMANDLigne 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 :

ToucheAction
PTrier par utilisation CPU
MTrier par utilisation mémoire
TTrier par temps CPU cumulé
kDemander un PID à tuer
rRenommer la priorité d’un processus
1Basculer vers la vue par cœur CPU
uFiltrer par nom d’utilisateur
fOuvrir le gestionnaire de champs (ajouter/supprimer des colonnes)
qQuitter
dModifier l’intervalle de rafraîchissement (secondes)
HAfficher 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 :

ToucheAction
F2Configuration (couleurs, colonnes, jauges)
F3Rechercher dans la liste des processus
F4Filtrer (n’afficher que les processus correspondants)
F5Vue en arbre (hiérarchie des processus)
F6Sélecteur de colonne de tri
F9Envoyer un signal au processus sélectionné
F10Quitter
Touches fléchéesNaviguer dans la liste des processus
EspaceMarquer 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épstophtoppgrep/pkill
Rafraîchissement en directNonOuiOuiNon
Support sourisNonLimitéOuiNon
Vue en arbreOption --forestNonF5Non
Envoi de signauxNonTouche kF9Directement
Filtrer/rechercherPipe vers grepTouche uF4/F3Par motif/regex
Sortie coloréeNonBasiqueRicheNon
Adapté aux scriptsExcellentMédiocreMédiocreExcellent
Installation requiseIntégréIntégréOuiInté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 :

SignalNuméroAction par défautCas d’utilisation
SIGTERM15Arrêt propreArrêt normal — permet le nettoyage
SIGKILL9Tuer immédiatementLe processus ignore SIGTERM
SIGHUP1Rechargement configIndiquer aux démons de relire la config
SIGSTOP19Pause (non bloquable)Suspendre un processus
SIGCONT18ReprendreReprendre un processus suspendu
SIGUSR1/210/12Défini par l’utilisateurSpé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 aux donne une instantané triée par CPU ou mémoire ; utilisez --forest pour une vue en arbre.
  • top et htop offrent une surveillance en direct ; htop ajoute 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 / pgrep sont des alternatives adaptées aux scripts pour kill quand vous connaissez un nom plutôt qu’un PID.
  • nice / renice ajustent la priorité d’ordonnancement (-20 à 19) ; les valeurs négatives nécessitent root.
  • bg / fg / jobs gèrent le contrôle des jobs du shell ; utilisez nohup ou tmux pour survivre à une déconnexion.
  • /proc/<PID>/ est la source de vérité — status, cmdline, fd/ et maps révèlent tout sur un processus en cours.

Articles Connexes