Guide pour comprendre la gestion des processus sous Linux avec 'ps' et 'kill'
La gestion des processus est fondamentale pour une administration système Linux efficace. Lorsque les applications deviennent non réactives, consomment des ressources excessives ou doivent être redémarrées proprement, savoir comment les identifier et interagir avec elles est crucial. Ce guide sert d'introduction complète à l'épine dorsale de la gestion des processus sous Linux : la commande ps pour visualiser les états des processus et la commande kill pour envoyer des signaux afin de gérer leur cycle de vie.
Comprendre comment Linux gère les programmes en cours d'exécution — chacun se voyant attribuer un identifiant de processus (PID) unique — permet aux administrateurs de maintenir la stabilité du système, de résoudre les goulots d'étranglement de performance et de s'assurer que les services fonctionnent comme prévu. Nous explorerons la syntaxe essentielle et les indicateurs courants qui font de ces commandes des outils indispensables dans la boîte à outils de tout administrateur système.
Le modèle de processus Linux : PIDs 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 moyen principal par lequel les outils système référencent et manipulent un processus spécifique.
Les processus passent par divers états (par exemple, Running, Sleeping, Stopped, Zombie). Connaître l'état peut immédiatement orienter les étapes de dépannage.
Visualisation des processus avec la commande ps
La commande ps (process status) est utilisée pour afficher des informations sur les processus actuellement 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 : style Unix (précédé de -) et style BSD (sans préfixe). La pratique moderne privilégie souvent la combinaison d'indicateurs de style Unix pour des vues complètes.
1. Visualisation de tous les processus (style BSD)
La commande la plus courante pour un aperçu du système est ps aux.
a: Affiche les processus de tous les utilisateurs.u: Affiche les processus dans un format orienté utilisateur (affichant l'utilisateur, l'utilisation du CPU, l'utilisation de la mémoire, etc.).x: Inclut les processus qui n'ont pas de terminal de contrôle (comme les démons en arrière-plan).
ps aux
2. Visualisation des processus dans un format standard (style UNIX)
La commande ps -ef fournit une liste complète dans un format plus ancien, mais toujours largement utilisé.
-e: Sélectionne tous les processus.-f: Affiche la liste en format complet (y compris le PPID et les arguments de la commande).
ps -ef
Interprétation des colonnes de sortie clés
Indépendamment des indicateurs utilisés, certaines colonnes sont critiques pour la gestion des processus :
| Colonne | Description |
|---|---|
| PID | Identifiant de processus (l'identifiant unique) |
| PPID | Identifiant du processus parent (le PID du processus qui a lancé celui-ci) |
| USER | L'utilisateur qui possède le processus |
| %CPU | Pourcentage du temps CPU utilisé |
| %MEM | Pourcentage de la mémoire physique utilisée |
| VSZ | Taille de la mémoire virtuelle (en KiB) |
| RSS | Resident Set Size (mémoire physique utilisée, en KiB) |
| STAT | État actuel du processus (par exemple, R=Running, S=Sleeping, Z=Zombie) |
| COMMAND | La commande qui a lancé le processus |
Filtrage des processus avec grep
Pour trouver un processus spécifique, il est courant de rediriger la sortie de ps vers grep.
Exemple : Recherche de toutes les instances en cours du serveur web Apache (httpd) :
ps aux | grep httpd
Astuce : Lorsque vous utilisez
ps | grep, vous verrez souvent la commandegrepelle-même listée dans la sortie. Pour filtrer cela, utilisez la notation entre crochets dans votre modèle de recherche :
bash ps aux | grep '[h]ttpd'
Gestion des processus avec la commande kill
La commande kill n'arrête pas seulement les processus ; elle leur envoie des signaux. Le comportement par défaut est de demander une terminaison propre, mais d'autres signaux peuvent instruire un processus de relire les 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émotechniques 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 proprement. |
| SIGKILL | 9 | Le signal de terminaison immédiat et forcé. Le processus ne peut pas l'ignorer. |
| SIGHUP | 1 | Signal de raccrochage (hangup), souvent utilisé par les démons pour relire les fichiers de configuration. |
| SIGSTOP | 19 | Arrête (met en pause) un processus sans le terminer. |
| SIGCONT | 18 | Reprend un processus arrêté. |
Envoi de signaux avec kill
La syntaxe de base de la commande kill est la suivante :
kill -SIGNAL PID
1. Terminaison propre (meilleure pratique)
Essayez toujours de terminer un processus proprement en utilisant d'abord SIGTERM (signal 15). Cela donne à l'application le temps de sauvegarder les données et de fermer les connexions.
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 instantanément, sans nettoyage, ce qui peut potentiellement entraîner une perte ou une corruption de données dans certaines applications.
kill -9 12345
Gestion des processus par nom : pkill et killall
Bien que ps et kill s'appuient sur les PID, il est parfois plus rapide de cibler les processus par leur nom. Utilisez ces commandes avec une extrême prudence, car elles peuvent affecter plusieurs processus simultanément.
killall
Termine tous les processus correspondant exactement au nom de processus 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 le nom de commande contient 'firefox'
pkill -f firefox
Avertissement sur
killalletpkill: Si vous ciblez accidentellement un processus système critique (commeinitousystemd), vous pouvez déstabiliser ou faire planter l'ensemble de votre système d'exploitation. Vérifiez toujours le PID cible à l'aide depsavant d'utiliserkillalloupkillavec des motifs larges.
Résumé du flux de travail de gestion des processus
Pour dépanner une application incontrôlée, suivez cette approche systématique :
- Identifier : Utilisez
ps aux | grep <nom_du_processus>pour trouver le PID du processus et vérifier son état. - Vérifier l'état : Examinez la colonne
STAT. Si c'estZ(Zombie), le processus parent est défectueux et un redémarrage pourrait être nécessaire si le parent ne peut pas être arrêté. - Tenter un arrêt propre : Envoyez
SIGTERM(kill PIDpar défaut). Attendez quelques secondes. - Vérifier l'arrêt : Exécutez
psà nouveau. - Arrêt forcé (si nécessaire) : Si le processus persiste, envoyez
SIGKILL(kill -9 PID).
Maîtriser ps et kill est essentiel pour maintenir un environnement Linux sain et réactif. En comprenant les PID et les différents signaux disponibles, les administrateurs acquièrent un contrôle précis sur l'exécution du système.