glossaire-linux

Processus

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

psVos processus dans le terminal courant.
ps auxTous les processus du système, format BSD avec %CPU et %MEM.
ps -efTous les processus, format UNIX avec PPID (parent).
ps -u nomProcessus d'un utilisateur précis.
ps --forestVue 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

PTrier par consommation CPU (par défaut).
MTrier par consommation mémoire.
kTuer un processus (demande le PID puis le signal).
rRenicer (changer la priorité).
1Affiche le détail par cœur CPU.
qQuitter.

Options de lancement

-d NDélai de rafraîchissement en secondes.
-n NS'arrête après N rafraîchissements.
-p PIDSurveille 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

F2Configuration (couleurs, colonnes).
F3Recherche.
F4Filtre.
F5Vue arborescente.
F6Critère de tri.
F9Envoyer un signal au processus sélectionné.
F10Quitter.
Workflow type : retrouver un processus gourmand
  1. 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.
  2. F4 pour filtrer si on a déjà un bout de nom (ex. taper chrome n'affiche que les processus qui matchent).
  3. Naviguer aux flèches pour sélectionner la ligne.
  4. 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 / -TERMDemande poliment de s'arrêter (le processus peut nettoyer avant). Comportement par défaut.
-9 / -KILLForce 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 / -INTIdentique à Ctrl+C.
-STOPMet en pause le processus.
-CONTReprend 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

-fMatch sur la ligne de commande complète, pas seulement le nom du binaire.
-u USERLimite aux processus de cet utilisateur.
-n / -oLe 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.

Voir aussi : kill ps lsof

Plans d'exécution

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.

Voir aussi : ps top pgrep

Diagnostic

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

-iFiltrer sur les sockets réseau. Sans argument : tous. Avec : -i :443, -i tcp:80, -i @192.168.1.10.
-i -P -nCombo 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 PIDTous les fichiers d'un processus précis.
-u USERTous les fichiers ouverts par cet utilisateur. ^USER avec un caret pour exclure.
+D /cheminTous les fichiers ouverts dans cette arborescence. Le + (et non -) déclenche la récursion.
FICHIERQui 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.

Voir aussi : ps kill ss umount