Guide pour comprendre la gestion des processus Linux avec 'ps' et 'kill'

Apprenez à inspecter les processus Linux avec `ps`, à lire les colonnes clés et à arrêter les processus en toute sécurité avec `kill`, `pkill` et `killall`.

Guide pour comprendre la gestion des processus Linux avec 'ps' et 'kill'

Gérer les processus Linux est une compétence quotidienne de dépannage. Lorsqu'une application se bloque, qu'un travail de sauvegarde consomme du CPU ou qu'un démon a besoin d'un redémarrage propre, ps vous aide à trouver le processus et kill vous permet de lui envoyer le bon signal.

Chaque programme en cours d'exécution possède un identifiant de processus, ou PID. Une fois que vous connaissez ce PID, vous pouvez inspecter la propriété, les processus parents, l'utilisation du CPU et de la mémoire, et décider de demander au processus de s'arrêter proprement ou de le forcer à s'arrêter en dernier recours.

Le modèle de processus Linux : PID et états

Sous Linux, chaque programme, service ou tâche en cours d'exécution est traité comme un processus. Chaque processus est identifié de manière unique par un identifiant de processus (PID), un entier positif attribué par le noyau lors de sa création. Ce PID est le principal moyen pour les outils système de référencer et de manipuler un processus spécifique.

Les processus passent par des états tels que en cours d'exécution, en sommeil, arrêté et zombie. Un processus en sommeil attend généralement une entrée/sortie ou un autre événement. Un zombie est déjà sorti, mais son processus parent n'a pas collecté son état de sortie.

Afficher les processus avec la commande ps

La commande ps (statut du processus) est utilisée pour afficher des informations sur les processus en cours d'exécution. Comme la sortie peut être écrasante, différentes options sont utilisées pour sélectionner les processus à afficher et les colonnes d'informations à inclure.

Syntaxe et indicateurs essentiels de ps

Il existe deux styles principaux pour les indicateurs ps : le style Unix (préfixé par -) et le style BSD (sans préfixe). La pratique moderne favorise souvent la combinaison d'indicateurs de style Unix pour des vues complètes.

1. Afficher tous les processus (style BSD)

La commande la plus courante pour une vue d'ensemble du système est ps aux.

  • a : Afficher les processus pour tous les utilisateurs.
  • u : Afficher les processus dans un format orienté utilisateur (affichant l'utilisateur, l'utilisation du CPU, l'utilisation de la mémoire, etc.).
  • x : Inclure les processus qui n'ont pas de terminal de contrôle (comme les démons en arrière-plan).
ps aux

2. Afficher les processus dans un format standard (style UNIX)

La commande ps -ef fournit une liste complète dans un format POSIX.

  • -e : Sélectionner tous les processus.
  • -f : Afficher la liste au format complet, y compris le PPID et les arguments de la commande.
ps -ef

Interpréter les colonnes de sortie clés

Quels que soient les indicateurs utilisés, certaines colonnes sont essentielles pour la gestion des processus :

Colonne Description
PID Identifiant du processus (l'identifiant unique)
PPID Identifiant du processus parent (le PID du processus qui a démarré celui-ci)
USER L'utilisateur propriétaire du processus
%CPU Pourcentage de temps CPU utilisé
%MEM Pourcentage de mémoire physique utilisée
VSZ Taille de la mémoire virtuelle (en Kio)
RSS Taille de l'ensemble résident (mémoire physique utilisée, en Kio)
STAT État actuel du processus (par exemple, R=En cours d'exécution, S=En sommeil, Z=Zombie)
COMMAND La commande qui a démarré le processus

Filtrer les processus avec grep

Pour trouver un processus spécifique, vous pouvez rediriger la sortie de ps vers grep.

Par exemple, cela recherche les processus Apache httpd :

ps aux | grep httpd

Astuce : ps | grep affiche souvent le processus grep lui-même. La notation entre crochets évite cette correspondance supplémentaire :

ps aux | grep '[h]ttpd'

Gérer les processus avec la commande kill

La commande kill ne se contente pas d'arrêter les processus ; elle leur envoie des signaux. Le comportement par défaut est de demander une terminaison gracieuse, mais d'autres signaux peuvent demander à un processus de relire ses fichiers de configuration, d'arrêter temporairement son exécution ou de forcer une sortie immédiate.

Comprendre les signaux

Les signaux sont des codes numériques ou mnémoniques standardisés. Vous pouvez lister les signaux disponibles en utilisant kill -l.

Nom du signal Numéro du signal Description
SIGTERM 15 Le signal de terminaison par défaut. Demande au processus de s'arrêter gracieusement.
SIGKILL 9 Le signal de terminaison immédiat et forcé. Le processus ne peut pas l'ignorer.
SIGHUP 1 Signal de déconnexion, souvent utilisé par les démons pour relire les fichiers de configuration.
SIGSTOP Généralement 19 sur Linux x86 Arrête (met en pause) un processus sans le terminer.
SIGCONT Généralement 18 sur Linux x86 Reprend un processus arrêté.

Envoyer des signaux avec kill

La syntaxe de base de la commande kill est :

kill -SIGNAL PID

1. Terminaison gracieuse (la meilleure pratique)

Essayez d'abord SIGTERM. Cela donne à l'application une chance de sauvegarder son état, de fermer les fichiers, de terminer les requêtes et de libérer les verrous.

kill 12345  # Par défaut, SIGTERM (15)
# OU
kill -15 12345

2. Terminaison forcée (dernier recours)

Si un processus ne répond pas et ignore SIGTERM, utilisez SIGKILL (signal 9). Cela arrête le processus sans nettoyage au niveau de l'application. Cela peut laisser des écritures partielles, des fichiers de verrouillage abandonnés ou des transactions interrompues en fonction de ce que le processus faisait.

kill -9 12345

Gérer les processus par nom : pkill et killall

Bien que ps et kill reposent sur les PID, il est parfois plus rapide de cibler les processus par nom. Utilisez ces commandes avec une extrême prudence, car elles peuvent affecter plusieurs processus simultanément.

killall

Termine tous les processus correspondant au nom de processus exact fourni.

killall httpd  # Envoie SIGTERM à tous les processus nommés 'httpd'
killall -9 cron  # Tue de force tous les processus 'cron'

pkill

Permet la correspondance de motifs (expressions régulières) lors de la sélection des processus à signaler, offrant plus de flexibilité que killall.

# Tue tout processus dont la ligne de commande complète contient 'firefox'
pkill -f firefox

Avertissement sur killall et pkill : Si vous ciblez accidentellement un processus système critique (comme init ou systemd), vous pouvez déstabiliser ou faire planter l'ensemble de votre système d'exploitation. Vérifiez toujours le PID cible à l'aide de ps avant d'utiliser killall ou pkill avec des motifs larges.

Un flux de travail sécurisé pour la gestion des processus

Lorsque vous résolvez un problème d'application incontrôlée, suivez cette approche systématique :

  1. Identifier : Utilisez ps aux | grep <nom_du_processus> pour trouver le PID du processus et vérifier son état.
  2. Vérifier l'état : Examinez la colonne STAT. Si elle est Z, le processus est déjà mort ; vous avez besoin du processus parent pour le récupérer. Vérifiez le PPID avant de tuer quoi que ce soit.
  3. Tenter un arrêt gracieux : Envoyez SIGTERM (kill PID par défaut). Attendez quelques secondes.
  4. Vérifier l'arrêt : Exécutez ps à nouveau.
  5. Forcer l'arrêt si nécessaire : Si le processus persiste et que vous comprenez le risque, envoyez SIGKILL avec kill -9 PID.

L'habitude pratique est simple : identifiez le PID, vérifiez le propriétaire et l'état, envoyez le signal utile le plus doux, puis vérifiez le résultat. Cela permet de garder le nettoyage des processus prévisible et de réduire les risques d'arrêter la mauvaise charge de travail.