Cinq commandes suffisent pour maîtriser les processus Linux : ps, top, kill, nice et renice. Avec elles, vous identifierez le processus qui monopolise un CPU, ajusterez sa priorité, et l'arrêterez proprement, sans jamais redémarrer le serveur.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Lister tous les processus actifs avec
ps auxetps -eo - Trouver un PID par nom avec
pgrepetpidof - Lire les codes STAT (R, S, D, Z, T) et comprendre ce qu'ils signalent
- Surveiller en temps réel avec
top - Ajuster la priorité au lancement (
nice) et sur un processus existant (renice) - Arrêter proprement : séquence SIGTERM → attente → SIGKILL
- Explorer
/proc/$PID/statusetlsofpour diagnostiquer
Dans quel contexte ?
Section intitulée « Dans quel contexte ? »Vous en avez besoin dès qu'un serveur se comporte anormalement :
- un processus utilise 100 % d'un CPU depuis plusieurs minutes,
- un service figure plusieurs fois dans
ps aux(fuite de processus), - une tâche est bloquée en état
D(I/O wait) et ne répond plus, - un zombie
Zs'accumule sans disparaître, - vous devez tuer proprement un service avant une maintenance.
Lister les processus avec ps
Section intitulée « Lister les processus avec ps »Afficher tous les processus
Section intitulée « Afficher tous les processus »ps auxColonnes clés :
| Colonne | Signification |
|---|---|
USER | Propriétaire |
PID | Identifiant unique |
%CPU | Pourcentage CPU utilisé |
%MEM | Pourcentage mémoire |
STAT | État (voir plus bas) |
COMMAND | Commande lancée |
Choisir les colonnes avec ps -eo
Section intitulée « Choisir les colonnes avec ps -eo »ps -eo pid,ppid,user,ni,stat,comm --sort=-%cpu | head -10Cela affiche les 10 processus les plus gourmands en CPU, avec leur PID parent et leur valeur nice.
Lire les états STAT
Section intitulée « Lire les états STAT »| Code | Signification |
|---|---|
R | En cours d'exécution (running) |
S | En attente (sleeping, réveillable) |
D | Bloqué sur I/O (non interruptible) |
Z | Zombie (terminé, parent n'a pas lu le code retour) |
T | Stoppé (Ctrl+Z ou SIGSTOP) |
s | Leader de session |
+ | Processus de premier plan (foreground) |
l | Multi-thread |
< | Haute priorité (valeur nice négative) |
Trouver un processus par nom
Section intitulée « Trouver un processus par nom »# Par nom exactpgrep nginx
# Plusieurs PIDs (plusieurs instances)pidof bash
# Pattern dans ps avec filtre auto-excluantps aux | grep '[n]ginx'Le trick [n]ginx exclut la ligne grep elle-même du résultat.
Visualiser l'arbre des processus
Section intitulée « Visualiser l'arbre des processus »pstree -pUtile pour comprendre les relations parent-enfant, identifier un processus orphelin, ou voir les threads d'un service.
Surveiller en temps réel avec top
Section intitulée « Surveiller en temps réel avec top »topTouches interactives utiles :
| Touche | Action |
|---|---|
P | Trier par CPU |
M | Trier par mémoire |
k | Envoyer un signal à un processus |
r | Changer la priorité (renice) |
q | Quitter |
Priorité d'exécution : nice et renice
Section intitulée « Priorité d'exécution : nice et renice »Chaque processus a une valeur nice de −20 (haute priorité) à +19 (basse priorité). La valeur par défaut est 0. Plus on monte, moins le processus est prioritaire.
Lancer un processus avec une priorité réduite
Section intitulée « Lancer un processus avec une priorité réduite »nice -n 15 tar czf archive.tar.gz /dataPratique pour des tâches longues (sauvegardes, compilations) qui ne doivent pas perturber les autres services.
Modifier la priorité d'un processus en cours
Section intitulée « Modifier la priorité d'un processus en cours »# Vérifier la valeur actuelleps -o pid,ni,comm -p 1234
# Changer la prioritérenice -n 10 -p 1234
# Vérifier aprèsps -o pid,ni,comm -p 1234Envoyer des signaux à un processus
Section intitulée « Envoyer des signaux à un processus »Signaux courants
Section intitulée « Signaux courants »| Numéro | Nom | Effet |
|---|---|---|
| 1 | SIGHUP | Rechargement de configuration |
| 2 | SIGINT | Interruption clavier (Ctrl+C) |
| 15 | SIGTERM | Demande d'arrêt propre (défaut) |
| 9 | SIGKILL | Arrêt forcé immédiat (non interceptable) |
| 19 | SIGSTOP | Pause (non interceptable) |
| 18 | SIGCONT | Reprise après pause |
Séquence recommandée pour arrêter un processus
Section intitulée « Séquence recommandée pour arrêter un processus »# 1. Demande d'arrêt proprekill -TERM 1234
# 2. Attendre quelques secondes, puis vérifiersleep 3 && ps -p 1234
# 3. Forcer seulement si le processus ne répond toujours paskill -9 1234Tuer par nom avec pkill et killall
Section intitulée « Tuer par nom avec pkill et killall »# Envoyer SIGTERM à tous les processus nommés "nginx"pkill -TERM nginx
# Recharger la configuration de sshdkill -HUP $(pidof sshd)
# Tuer tous les processus d'un nom (killall)killall -SIGTERM firefoxExplorer /proc pour diagnostiquer
Section intitulée « Explorer /proc pour diagnostiquer »Linux expose les informations de chaque processus dans /proc/<PID>/ :
# Fiche du processus courantcat /proc/$$/status
# Extraire les champs utilesgrep -E "^(Name|Pid|PPid|State|VmRSS)" /proc/1234/statusExemple de sortie :
Name: nginxState: S (sleeping)Pid: 1234PPid: 1VmRSS: 8560 kBLister les fichiers ouverts par un processus
Section intitulée « Lister les fichiers ouverts par un processus »lsof -p 1234Ou pour trouver quel processus utilise un port :
lsof -i :80Dépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Solution |
|---|---|---|
kill -9 1234 ne tue pas le processus | État D (I/O bloqué, non interruptible) | Diagnostiquer le sous-système I/O (disque, NFS) |
pkill nginx ne trouve rien | Nom de commande différent du binaire | Utiliser pgrep pour confirmer le nom exact |
renice -n -5 refusé | Utilisateur non root pour descendre sous 0 | Utiliser sudo renice |
Zombie Z qui ne disparaît pas | Processus parent n'a pas appelé wait() | Identifier le parent avec ps -o ppid -p $ZOMBIE, tuer le parent si possible |
top ne rafraîchit plus | Terminal gelé | q ou Ctrl+C, puis relancer |
À retenir
Section intitulée « À retenir »ps auxliste tous les processus ;ps -eochoisit les colonnes.pgrep <nom>etps aux | grep '[n]om'trouvent un PID par nom.- Les codes STAT (
R,S,D,Z,T) indiquent l'état,DetZméritent attention. nice -n N commande(priorité au lancement) ;renice -n N -p PID(après démarrage).- Toujours SIGTERM d'abord, attendre, puis SIGKILL seulement si nécessaire.
/proc/$PID/statusetlsof -p $PIDpermettent de diagnostiquer sans outil externe.