Tout programme en cours d'exécution sur Linux est un processus identifié par un PID. Cette page couvre la liste, la surveillance, la terminaison via signaux UNIX, et la gestion des plans d'exécution (avant-plan, arrière-plan, détaché).
Lister et surveiller
Snapshot avec ps, monitoring en temps réel avec top et htop.
ps
Lister les processus à un instant T
ps donne une photo des processus en cours. Sa syntaxe est un peu particulière car elle accepte trois conventions historiques : BSD (sans tiret), UNIX (avec tiret), et GNU (avec double tiret). Les deux invocations les plus courantes sont ps aux (BSD) et ps -ef (UNIX).
Combinaisons usuelles
ps
Vos processus dans le terminal courant.
ps aux
Tous les processus du système, format BSD avec %CPU et %MEM.
ps -ef
Tous les processus, format UNIX avec PPID (parent).
ps -u nom
Processus d'un utilisateur précis.
ps --forest
Vue en arbre (parent → enfants).
$ ps aux | grep '[n]ginx'
Trouve tous les processus nginx en cours.
$ ps aux --sort=-%mem --no-headers | head -n 10
Top 10 des processus consommant le plus de mémoire.
$ ps -ef --forest
Voir la hiérarchie complète : qui a lancé qui.
top
Moniteur de processus interactif (intégré à tout système)
top affiche en continu les processus triés par consommation, avec rafraîchissement toutes les 3 secondes par défaut. Indispensable pour comprendre rapidement ce qui consomme.
Raccourcis dans top
P
Trier par consommation CPU (par défaut).
M
Trier par consommation mémoire.
k
Tuer un processus (demande le PID puis le signal).
r
Renicer (changer la priorité).
1
Affiche le détail par cœur CPU.
q
Quitter.
Options de lancement
-d N
Délai de rafraîchissement en secondes.
-n N
S'arrête après N rafraîchissements.
-p PID
Surveille uniquement les PID donnés.
htop
Alternative moderne et interactive à top
htop propose une interface couleur, un défilement à la souris, des barres de charge par CPU, et des touches de fonction (F1–F10) pour les actions courantes.
Installation :
n'est pas systématiquement présent. sudo apt install htop sur Debian/Ubuntu, sudo dnf install htop sur Fedora.
Touches de fonction
F2
Configuration (couleurs, colonnes).
F3
Recherche.
F4
Filtre.
F5
Vue arborescente.
F6
Critère de tri.
F9
Envoyer un signal au processus sélectionné.
F10
Quitter.
Workflow type : retrouver un processus gourmand
F6 puis sélectionner PERCENT_CPU ou PERCENT_MEM selon ce qu'on cherche : la liste se trie par cette colonne et les coupables remontent en tête.
F4 pour filtrer si on a déjà un bout de nom (ex. taper chrome n'affiche que les processus qui matchent).
Naviguer aux flèches pour sélectionner la ligne.
F9 pour envoyer un signal au processus choisi : SIGTERM par défaut (laisse le processus se nettoyer), SIGKILL en dernier recours s'il ne réagit pas.
Vue arborescente (F5) :
bascule en mode tree, indispensable pour comprendre la chaîne de processus enfants — par exemple un terminal qui a lancé npm run qui a lancé Webpack qui a lancé esbuild. F5 à nouveau pour revenir à la vue plate.
Signaux et terminaison
Sous Linux, on n'arrête pas vraiment un processus : on lui envoie un signal qu'il intercepte (ou pas) pour décider quoi faire.
kill
Envoyer un signal à un processus
Le nom est trompeur : kill n'est pas réservé à terminer. Elle envoie n'importe quel signal POSIX à un processus identifié par son PID. Sans option, le signal envoyé est SIGTERM (terminaison polie).
Signaux les plus utiles
-15 / -TERM
Demande poliment de s'arrêter (le processus peut nettoyer avant). Comportement par défaut.
-9 / -KILL
Force la terminaison immédiate. Le processus ne peut pas l'intercepter. À utiliser en dernier recours.
-1 / -HUP
« Hangup ». Souvent utilisé pour demander à un démon de relire sa configuration.
-2 / -INT
Identique à Ctrl+C.
-STOP
Met en pause le processus.
-CONT
Reprend un processus mis en pause.
$ kill 1234
SIGTERM à PID 1234. Le processus reçoit la demande et peut faire son ménage avant de quitter.
$ kill -9 1234
Force la terminaison. Aucun nettoyage possible, le noyau coupe le processus.
# kill -HUP 1234
Envoie SIGHUP au PID choisi. Pour nginx, cibler uniquement le processus maître après vérification du PID ; systemctl reload nginx utilise la procédure définie par le service. Tous les programmes n’interprètent pas SIGHUP comme un rechargement.
$ kill -l
Liste tous les signaux disponibles avec leur numéro.
Bonne pratique :
toujours essayer kill (TERM) d'abord, attendre quelques secondes, et n'utiliser -9 que si le processus reste bloqué.
killall · pkill · pgrep
Tuer ou chercher des processus par leur nom (sans connaître le PID)
Trois outils pour traiter les processus par nom plutôt que par PID. killall match exactement le nom du programme, pkill envoie un signal aux processus correspondant à un pattern, pgrep fait juste la recherche sans tuer (toujours utile avant un pkill).
Options communes à pgrep et pkill
-f
Match sur la ligne de commande complète, pas seulement le nom du binaire.
-u USER
Limite aux processus de cet utilisateur.
-n / -o
Le plus récent (newest) ou le plus ancien (oldest) des matches.
-l
(pgrep) Affiche aussi le nom du processus.
-a
(pgrep) Affiche la ligne de commande complète.
-SIGNAL
(pkill) Signal à envoyer (défaut TERM) : -HUP, -9, etc.
$ pgrep -af nginx
1234 nginx: master process /usr/sbin/nginx
1235 nginx: worker process
Liste les PID + cmdline complète. Réflexe avant tout pkill : on vérifie qu'on cible bien ce qu'on veut.
$ pkill -HUP -F /run/nginx.pid
Envoie SIGHUP au PID lu dans le fichier du processus maître nginx. Vérifier le chemin configuré par la directive pid ; /run/nginx.pid est un exemple. Éviter pkill -HUP nginx qui viserait aussi les workers.
$ pkill -f "python.*buggy_script.py"
-f applique une expression régulière à toute la ligne de commande. Vérifier les cibles avec pgrep -af avant de signaler : un motif large peut aussi sélectionner d’autres interpréteurs ou commandes.
$ pkill -u alice -9
Tue tous les processus d'alice avec SIGKILL. Utile pour kicker une session bloquée. -u root est dangereux et exige beaucoup de prudence.
$ killall firefox
Tue tous les processus exactement nommés firefox. Plus strict que pkill : pas de pattern, juste le nom exact.
Différence subtile :killall foo match le nom de programme strict. pkill foo match si foo apparaît dans le nom. pkill -f foo match dans la ligne de commande complète. Du plus strict au plus permissif.
Avant-plan, arrière-plan, détaché du terminal — comment piloter ce qui s'exécute après le lancement.
jobs · bg · fg
Gérer les tâches du shell
Quand vous lancez une commande longue, vous pouvez la suspendre (Ctrl+Z), la reprendre en arrière-plan (bg) ou la ramener en avant-plan (fg).
$ sleep 1000
Dans un shell interactif avec contrôle des tâches, lancer sleep puis appuyer sur Ctrl+Z pour le suspendre. Exécuter ensuite les étapes suivantes une par une. Le numéro de tâche peut différer de 1.
$ bg %1
[1]+ sleep 1000 &
Reprend la tâche 1 en arrière-plan après sa suspension avec Ctrl+Z.
$ jobs
[1]+ Running sleep 1000 &
Vérifie les tâches du shell courant.
$ fg %1
Ramène la tâche 1 au premier plan ; Ctrl+C permet ensuite de l'arrêter.
& à la fin d'une commande
Lancer directement en arrière-plan
$ long_traitement.sh &
[1] 24531
Le shell affiche le numéro de job ([1]) et le PID (24531) puis vous rend la main.
nohup
Détacher un processus du terminal (survit à la déconnexion)
nohup démarre une commande en lui faisant ignorer SIGHUP. Selon le terminal, le shell et sa configuration, une déconnexion peut provoquer ce signal. nohup ne protège pas d’autres signaux ni d’une politique systemd qui termine les processus de la session ; pour un serveur durable, utiliser un service systemd.
$ nohup ./serveur.sh > serveur.log 2>&1 &
Lance en arrière-plan avec les sorties dans serveur.log et SIGHUP ignoré. Cela ne garantit pas la survie à une fermeture de session gérée par un autre mécanisme ; préférer systemd pour un service permanent.
Alternative moderne :
pour des sessions persistantes avec accès à la sortie, tmux ou screen sont bien plus pratiques.
nice · renice
Ajuster la priorité CPU d'un processus
La niceness Linux va de -20 à 19 ; elle influence le partage du CPU pour les politiques ordinaires. nice -n N ajoute N à la valeur héritée, alors que renice N fixe une valeur absolue avec util-linux. Diminuer la niceness exige les droits adaptés (root, CAP_SYS_NICE ou une limite RLIMIT_NICE suffisante). Cela ne réserve ni CPU ni débit disque.
Syntaxe
nice -n N commande args # ajoute N a la niceness heritee
renice N -p PID # fixe la niceness sous Linux/util-linux
renice N -u USER # processus d’un utilisateur
renice N -g PGID # groupe de processus (pas groupe Unix)
$ nice -n 19 tar czf backup.tar.gz /home &
Ajoute 19 à la niceness héritée, avec la borne maximale Linux à 19. Si la niceness initiale vaut 0, le résultat est 19 ; une valeur initiale négative peut donner un autre résultat. Cela influence le partage du CPU mais ne fixe pas une limite de débit I/O.
$ renice 10 -p $(pgrep -f long-job)
Adoucit un processus déjà en cours après s'être rendu compte qu'il bouffait le CPU. Combo classique avec pgrep pour trouver son PID.
# renice -10 -p $(pgrep -fn audio)
Augmente la priorité (valeur négative — root requis) du processus audio le plus récent. Pour les workloads temps-réel mou (audio, vidéo).
Pour l'I/O
voir ionice (paquet util-linux) : ionice -c 3 cmd met l'I/O en classe idle (le processus ne fait des I/O que quand personne d'autre n'en veut). Souvent plus efficace que nice pour des backups ou des indexations qui saturent surtout le disque.
Quand quelque chose tient un fichier ouvert ou écoute un port et qu'on ne sait pas qui : lsof est l'outil de référence pour faire le lien entre un fichier/socket/descripteur et le processus responsable.
lsof
Lister les fichiers (et sockets) ouverts
lsof (list open files) part du principe Unix « tout est fichier » : il liste ce qu'un processus a ouvert, qu'il s'agisse d'un vrai fichier, d'un socket TCP, d'un pipe ou d'un device. Indispensable pour répondre à « quel processus écoute sur ce port ? », « qui empêche le démontage de cette partition ? », « quels descripteurs ce démon a-t-il ? ».
Sélecteurs courants
-i
Filtrer sur les sockets réseau. Sans argument : tous. Avec : -i :443, -i tcp:80, -i @192.168.1.10.
-i -P -n
Combo classique : numéros de ports en clair (pas de résolution /etc/services) et IP en clair (pas de DNS reverse). Beaucoup plus rapide.
-p PID
Tous les fichiers d'un processus précis.
-u USER
Tous les fichiers ouverts par cet utilisateur. ^USER avec un caret pour exclure.
+D /chemin
Tous les fichiers ouverts dans cette arborescence. Le + (et non -) déclenche la récursion.
FICHIER
Qui a ouvert ce fichier précis : lsof /var/log/syslog.
# lsof -nP -iTCP:443 -sTCP:LISTEN
COMMAND PID USER FD TYPE NODE NAME
nginx 1234 root 6u IPv4 ... TCP *:443 (LISTEN)
nginx 1235 nginx 6u IPv4 ... TCP *:443 (LISTEN)
Qui écoute sur le port 443 ? Réponse en deux lignes. -P -n évite les résolutions inutiles. Réflexe quand un service refuse de démarrer avec « address already in use ».
# lsof +D /mnt/usb
Avant de débrancher une clé USB : qui a un fichier ouvert dessus ? Pareil quand umount renvoie « target is busy ». Une fois les coupables identifiés, on peut les fermer ou les tuer puis redémonter.
$ lsof -p $(pgrep -n nginx)
Tous les descripteurs ouverts par le processus nginx le plus récent. Utile pour savoir quels fichiers de config et de log un démon tient à un instant T.
# lsof -nP -i tcp -sTCP:ESTABLISHED
Toutes les connexions TCP établies — alternative à ss -tnp avec des informations process plus riches.
Cousins utiles :fuser (paquet psmisc) répond à la même question avec une syntaxe plus brève : fuser -mv /mnt/usb liste les processus accédant au système de fichiers. ss (page Réseau) est plus efficace spécifiquement pour les sockets.