Commande killall : arrêter des processus par leur nom, le signal -9 et installer psmisc
La commande killall est une commande Linux qui choisit les processus en cours d'exécution par le nom du programme plutôt que par le numéro de processus (PID) et leur envoie un signal ; si vous n'indiquez aucun signal, elle envoie SIGTERM (selon le manuel officiel). Comme elle arrête d'un coup tous les processus portant le même nom, nous avons d'abord vérifié avec pgrep et ps quatre processus lancés sur un serveur AlmaLinux 9 à partir de copies de sleep sous d'autres noms ; pour un exécutable de plus de 15 caractères, seuls les 15 premiers caractères restaient dans le nom du processus.
Nous avons exécuté killall uniquement sur des processus xxsleep lancés pour le test avec un compte normal sur un serveur Debian 12. Les blocs de résultats montrent la sortie de rpm, pgrep, ps, pidof, cat et kill exécutés avec le compte root sur un serveur AlmaLinux 9.8, et la sortie de killall exécuté sur le serveur Debian 12. Les numéros de processus (PID), les noms de processus, les chemins des exécutables et les noms de compte ont été remplacés par des valeurs d'exemple.
1️⃣ Installer la commande killall
killall fait partie du paquet psmisc. Sur un serveur AlmaLinux 9.8, en vérifiant avec rpm à quel paquet appartient /usr/bin/killall, la version psmisc 23.4 s'est affichée.
rpm -qf --qf '%{NAME} %{VERSION}\n' /usr/bin/killallpsmisc 23.4La liste des fichiers du même paquet, affichée avec rpm -ql, contenait aussi pstree et fuser.
Si [command not found] s'affiche, c'est-à-dire que la commande est introuvable, installez le paquet psmisc. Sur la famille RHEL, c'est [dnf install psmisc], et sur la famille Debian, [apt install psmisc]. Sur le serveur Debian 12, psmisc 23.6 était déjà installé, et killall se trouvait dans /usr/bin/killall.
En vérifiant sur le serveur AlmaLinux 9.8, pkill, au nom proche, se trouvait dans le paquet procps-ng, et kill était une commande intégrée du shell.
2️⃣ Utiliser la commande killall
La forme de base est [killall nom du processus]. Elle trouve tous les processus en cours portant le nom indiqué et leur envoie un signal ; si vous indiquez plusieurs noms, elle fait la même chose pour chaque nom (selon le manuel officiel).
Comme les processus portant le même nom s'arrêtent tous en même temps, vérifiez d'abord avec pgrep ce qui tourne sous ce nom. Nous avons copié sleep dans un dossier de travail sous les noms xxsleep-a1, xxsleep-a2 et xxsleep-longname-x1, lancé xxsleep-a1 deux fois pour avoir quatre processus au total, puis affiché les numéros et les noms avec -l.
pgrep -l xxsleep2141 xxsleep-a1
2142 xxsleep-a1
2150 xxsleep-a2
2155 xxsleep-longnamSur la quatrième ligne, l'exécutable s'appelle xxsleep-longname-x1, mais le nom du processus était coupé à xxsleep-longnam.
Avec -a, la ligne de commande complète exécutée s'affiche. Les deux xxsleep-a1 de même nom ont été distingués par le dernier argument en secondes, 300 et 310.
pgrep -a xxsleep2141 /root/work/xxsleep-a1 300
2142 /root/work/xxsleep-a1 310
2150 /root/work/xxsleep-a2 320
2155 /root/work/xxsleep-longname-x1 330Pour ne trouver que les processus dont le nom correspond exactement, ajoutez -x. Avec xxsleep-a1, le résultat était deux numéros.
pgrep -x xxsleep-a12141
2142Pour ne vérifier que les numéros en saisissant un nom tel quel, utilisez pidof. La recherche de xxsleep-a1 a affiché les deux numéros sur une ligne.
pidof xxsleep-a12142 2141ps n'affiche que les processus dont le nom correspond exactement si vous indiquez plusieurs noms séparés par des virgules après -C.
ps -o pid,comm -C xxsleep-a1,xxsleep-a2 PID COMMAND
2141 xxsleep-a1
2142 xxsleep-a1
2150 xxsleep-a2Sur le serveur Debian 12, nous avons lancé quatre processus sous les mêmes noms et exécuté [killall xxsleep-a1] : rien ne s'est affiché et la commande s'est terminée avec le code de sortie 0. En cherchant de nouveau avec pgrep, les deux xxsleep-a1 avaient disparu et seuls xxsleep-a2 et xxsleep-longname-x1 restaient. Si vous indiquez un chemin contenant une barre oblique (/) au lieu d'un nom, elle choisit les processus qui exécutent ce fichier, quel que soit leur nom (selon le manuel officiel).
Avec le nom inexistant xxsleep-zz, une ligne avec [no process found] après le nom s'est affichée, et la commande s'est terminée avec le code de sortie 1. Le code de sortie n'est 0 que si au moins un processus a été arrêté pour chaque nom indiqué (selon le manuel officiel).
killall xxsleep-zzxxsleep-zz: no process foundPour arrêter un seul processus dont vous connaissez le numéro, envoyez un signal à ce seul numéro avec kill : Commande Linux kill.
3️⃣ Options de la commande killall
En lisant dans /proc/PID/comm le nom du processus lancé sous xxsleep-longname-x1, seuls les 15 premiers caractères restaient : xxsleep-longnam.
cat /proc/2155/commxxsleep-longnamNous avons exécuté pgrep avec xxsleep-longname, qui fait 16 caractères.
pgrep -a xxsleep-longnameLa commande s'est terminée sans sortie avec le code de sortie 1, et en cherchant de nouveau avec xxsleep-longnam, de 15 caractères, ce processus est apparu.
pgrep -l xxsleep-longnam2155 xxsleep-longnamLorsque killall reçoit un nom de plus de 15 caractères et que certains processus ont un nom complet illisible, il cible tous ceux dont les 15 premiers caractères correspondent ; avec -e, il ignore ces entrées (selon le manuel officiel). Sur le serveur Debian 12, en indiquant les 15 premiers caractères xxsleep-longnam avec -e et -v, des lignes ont indiqué que trois autres processus au nom coupé à 15 caractères étaient ignorés, et la commande s'est terminée par [no process found].
killall -e -v xxsleep-longnamkillall: skipping partial match quota_events_un(37)
killall: skipping partial match acpi_thermal_pm(112)
killall: skipping partial match ext4-rsv-conver(246)
xxsleep-longnam: no process foundAvec le nom complet xxsleep-longname-x1, les mêmes lignes d'omission ont été suivies d'une ligne indiquant le signal envoyé à ce processus.
killall -e -v xxsleep-longname-x1killall: skipping partial match quota_events_un(37)
killall: skipping partial match acpi_thermal_pm(112)
killall: skipping partial match ext4-rsv-conver(246)
Killed xxsleep-longname-x1(2155) with signal 15Avec -v, une ligne contenant le nom, le numéro et le numéro du signal s'est affichée pour chaque processus ayant reçu un signal.
killall -v xxsleep-a2Killed xxsleep-a2(2150) with signal 15-i demande pour chaque processus s'il faut l'arrêter. Nous avons relancé deux xxsleep-a1 et passé y puis n par l'entrée standard : les deux questions se sont affichées à la suite sur une ligne, et seul le premier xxsleep-a1 s'est arrêté, le second est resté.
printf 'y\nn\n' | killall -i xxsleep-a1Kill xxsleep-a1(2171) ? (y/N) Kill xxsleep-a1(2172) ? (y/N)-u ne choisit que les processus appartenant à ce compte ; si vous omettez le nom, tous les processus de ce compte sont ciblés. En indiquant aussi xxsleep-a1 après le nom du compte, le signal n'a été envoyé qu'au xxsleep-a1 restant.
killall -v -u user xxsleep-a1Killed xxsleep-a1(2172) with signal 15-o et -y choisissent selon l'heure de démarrage, et la durée s'écrit avec un nombre suivi d'une unité s, m, h, d, w, M ou y, comme dans [-o 30m].
-r lit les noms comme des expressions régulières étendues. En passant le motif ^xxsleep-a à pgrep, trois processus commençant par xxsleep-a se sont affichés.
pgrep -l '^xxsleep-a'2141 xxsleep-a1
2142 xxsleep-a1
2150 xxsleep-a2-w attend, en vérifiant chaque seconde, que tous les processus ayant reçu un signal aient disparu. Si un processus ignore le signal ou reste à l'état zombie, l'attente peut ne jamais finir.
Le premier tableau ci-dessous regroupe les commandes de vérification et les options de killall réellement exécutées dans cet article ; les options de killall non exécutées figurent dans le second tableau, selon le manuel officiel.
📌 Vérifier les processus et killall : résultats de cet article
| Commande | Rôle | Résultat dans cet article | |
|---|---|---|---|
| pgrep -l nom | Numéro et nom des processus dont le nom le contient | Quatre lignes pour xxsleep ; le nom long ne s'affiche que jusqu'aux 15 premiers caractères, xxsleep-longnam | |
| pgrep -a nom | Numéro et ligne de commande complète | Les deux xxsleep-a1 de même nom distingués par les derniers arguments 300 et 310 | |
| pgrep -x nom | Uniquement les numéros des processus dont le nom correspond exactement | Pour xxsleep-a1, deux lignes : 2141 et 2142 | |
| pidof nom | Les numéros qui tournent sous ce nom, sur une ligne | Pour xxsleep-a1, 2142 2141 | |
| ps -o pid,comm -C nom | Numéro et nom des processus dont le nom correspond exactement, plusieurs noms séparés par des virgules | Deux lignes xxsleep-a1 et une ligne xxsleep-a2 | |
| cat /proc/PID/comm | Nom du processus (jusqu'aux 15 premiers caractères) | 2155 est xxsleep-longnam | |
| killall nom | SIGTERM aux processus portant ce nom | Les deux xxsleep-a1 arrêtés avec le code de sortie 0 ; le nom inexistant xxsleep-zz a donné no process found et le code de sortie 1 | |
| killall -e nom | Les noms de plus de 15 caractères seulement si le nom complet correspond | xxsleep-longnam a donné no process found, xxsleep-longname-x1 arrêté | |
| killall -v nom | Affiche le résultat pour chaque processus ayant reçu un signal | Killed xxsleep-a2(2150) with signal 15 | |
| killall -i nom | Demande confirmation pour chaque processus avant de l'arrêter | Avec y et n, seul le premier xxsleep-a1 s'est arrêté | |
| killall -u nom du compte | Uniquement les processus appartenant à ce compte | Indiqué avec un nom, seul le xxsleep-a1 de ce compte s'est arrêté | |
| killall -9 nom | SIGKILL au lieu de SIGTERM | Killed xxsleep-a2(2173) with signal 9 |
📎 Autres options : selon le manuel officiel
| Option | Rôle | |
|---|---|---|
| -I, --ignore-case | Comparer les noms sans tenir compte de la casse | |
| -g, --process-group | Signal au groupe de processus au lieu du processus (une fois par groupe) | |
| -l, --list | Liste des noms de signaux connus | |
| -n, --ns PID | Uniquement les processus du même espace de noms PID que ce PID ; par défaut, tous les espaces de noms | |
| -o, --older-than durée | Uniquement les processus démarrés depuis plus longtemps que cette durée (unités s, m, h, d, w, M, y) | |
| -q, --quiet | Ne signale rien même si aucun processus n'a été arrêté | |
| -r, --regexp | Lire les noms comme des expressions régulières étendues | |
| -s, --signal signal | Signal à envoyer au lieu de SIGTERM | |
| -V, --version | Afficher les informations de version | |
| -w, --wait | Attendre que tous les processus ayant reçu un signal aient disparu | |
| -y, --younger-than durée | Uniquement les processus démarrés depuis moins longtemps que cette durée | |
| -Z, --context motif | Uniquement les processus dont le contexte de sécurité correspond au motif d'expression régulière étendue ; à indiquer avant les autres arguments ; le nom peut être omis |
🔲 Simulateur de la commande killall
Le simulateur ci-dessous commence avec une liste des quatre processus xxsleep plus le xxsleep-a2 du compte d'exemple user1. Touchez les puces pour comparer les lignes qui disparaissent de la liste avec [killall -v], [-i] et [-u] ; les messages de sortie de killall imitent la sortie obtenue sur le serveur Debian 12.
4️⃣ Signaux de killall
Le signal à envoyer s'indique par son nom, comme [-HUP] ou [-SIGHUP], par son numéro, comme [-1], ou après l'option -s (selon le manuel officiel). [killall -9 nom du processus] envoie le signal 9, SIGKILL. SIGKILL est un signal qu'un processus ne peut ni intercepter ni ignorer (selon le manuel officiel), si bien que le processus s'arrête sans pouvoir faire de nettoyage. C'est pourquoi on l'envoie quand le signal par défaut, SIGTERM, n'arrête pas le processus.
Sur le serveur Debian 12, en ajoutant -9 avec -v au xxsleep-a2 relancé, une ligne avec le numéro de signal 9 s'est affichée.
killall -9 -v xxsleep-a2Killed xxsleep-a2(2173) with signal 9Nous avons vérifié les noms et numéros des signaux avec [kill -l]. killall possède aussi une option -l qui affiche les noms de signaux qu'il connaît.
kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAXAvec un seul numéro, seul le nom de ce signal s'est affiché. Le 15 que killall envoie par défaut était TERM, et le 9 envoyé avec -9 était KILL.
kill -l 15TERMkill -l 9KILLSi vous indiquez un nom de signal absent de la liste, un message de la forme [FOO: unknown signal; killall -l lists signals.] s'affiche (selon le manuel officiel et les messages du programme).
🔢 FAQ & contenus recommandés
Vérification en temps réel
Commande top sous Linux (vérifier l'utilisation du CPU et de la mémoire)
Commande qui montre en temps réel la quantité de CPU et de mémoire utilisée par chaque processus.
Contrôle des tâches
Arrière-plan (Back Ground) et premier plan (Fore Ground) sous Linux : contrôler les processus
Méthode de contrôle des tâches pour envoyer une commande en arrière-plan puis la ramener au premier plan.
Fichiers ouverts
[Linux] Commande lsof : afficher les informations des fichiers en cours d'utilisation
Commande qui affiche les fichiers et sockets ouverts par un processus, avec son PID.
ℹ️ Mention d'affiliation
Le contenu de ce site contient des liens d'affiliation. Lorsqu'un visiteur achète un produit ou un service via l'un de ces liens, le site perçoit une commission du vendeur. Le montant payé par l'acheteur(il baisse lors des promotions ↓), lui, n'augmente pas. Les prix, remises et stocks indiqués correspondent à la date de rédaction et peuvent différer ; vérifiez-les donc auprès du vendeur avant d'acheter. Les produits sont choisis et évalués selon nos propres critères, et les commissions n'influencent ni l'ordre de présentation ni le contenu des évaluations.