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 | grepaffiche souvent le processusgreplui-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
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.
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 :
- 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 elle estZ, le processus est déjà mort ; vous avez besoin du processus parent pour le récupérer. Vérifiez lePPIDavant de tuer quoi que ce soit. - Tenter un arrêt gracieux : Envoyez
SIGTERM(kill PIDpar défaut). Attendez quelques secondes. - Vérifier l'arrêt : Exécutez
psà nouveau. - Forcer l'arrêt si nécessaire : Si le processus persiste et que vous comprenez le risque, envoyez
SIGKILLaveckill -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.