Linux / Commande killall : envoyer un signal aux processus de même nom

Sous Linux, killall de psmisc envoie un signal aux processus qui exécutent une commande du nom indiqué. Le signal par défaut est SIGTERM et plusieurs instances du même nom peuvent toutes être concernées. Vérifiez l'implémentation et les cibles avant d'utiliser cette commande : son sens peut différer sur d'autres systèmes Unix.

Vérifier le système et les candidats

killall [options] nom…

Ce guide concerne la version Linux du projet psmisc. Consultez man killall et les informations de version sur la machine où vous intervenez ; n'y transposez pas une commande uniquement parce que son nom existe.

Avant une action sur un nom simple, utilisez pgrep et l'affichage des commandes correspondantes :

pgrep -a -x myworker

Myworker désigne ici votre propre programme de test, déjà lancé, dont vous connaissez le nom. Contrôlez tous les PID et les commandes trouvés. Cette recherche fournit une vérification préalable, mais ne fige pas les processus et n'est pas un mode de simulation intégré à killall.

Pour un seul processus dont vous connaissez déjà l'identité, kill avec un PID vérifié permet de cibler ce numéro plutôt que toutes les instances d'un nom. Le guide kill comprend un exercice complet avec un enfant sleep créé par le shell.

Envoyer TERM puis vérifier les processus restants

Si tous les candidats nommés myworker sont bien ceux que vous souhaitez arrêter, la forme explicite de la demande est :

killall -TERM myworker

Une réussite reste généralement silencieuse. Après le délai de fermeture adapté au programme, contrôlez de nouveau :

pgrep -a -x myworker

Une sortie vide indique qu'aucun processus visible ne correspond à cette recherche au moment du relevé. Elle ne prouve pas, seule, que toutes les opérations de sauvegarde ou de fermeture attendues ont été accomplies. Pour un service, contrôlez également son état et ses journaux.

Si plusieurs comptes exécutent ce nom, restreignez d'abord la recherche au compte pertinent, puis utilisez la même limite d'utilisateur pour l'action. Alice doit être remplacée par le compte voulu :

pgrep -a -u alice -x myworker

Après examen des résultats :

killall -s TERM -u alice myworker

La restriction d'utilisateur ne vous confère pas de droit supplémentaire pour envoyer un signal. Conservez toujours le nom si votre intention est de viser ce programme : dans psmisc, une sélection par utilisateur peut aussi être utilisée sans nom et avoir un périmètre beaucoup plus large.

Utiliser les options de contrôle

Option psmisc Effet
-s signal Choisir le signal à envoyer, par exemple TERM.
-u utilisateur Limiter les cibles au propriétaire indiqué.
-i Demander une confirmation interactive avant l'action.
-v Indiquer si l'envoi du signal a réussi.
-w Attendre la disparition des processus concernés.

La confirmation -i aide à relire les cibles ; elle ne remplace pas la compréhension du nom et des permissions. De même, un message d'envoi réussi avec -v ne signifie pas qu'un programme a déjà terminé son nettoyage.

L'option -w peut attendre indéfiniment si le signal est ignoré, sans effet, ou si un processus reste zombie. Le manuel précise aussi que sa surveillance périodique ne détecte pas tous les cas de réutilisation de PID. Ne l'utilisez donc pas comme une garantie universelle d'achèvement dans une automatisation.

Distinguer les règles de nom et la gestion d'un service

Contrairement au motif de pgrep, le nom de killall n'est interprété comme une expression régulière que si vous activez -r. Un nom contenant une barre oblique a également une règle spécifique de sélection par fichier exécutable. Ne supposez pas qu'une recherche pgrep complexe et une commande killall construite avec le même texte sélectionnent exactement les mêmes cibles.

Les noms longs demandent aussi une attention particulière : le manuel psmisc décrit une limite de nom disponible à 15 caractères dans certains cas et l'option -e pour éviter de sélectionner des entrées dont le nom complet ne peut pas être vérifié. Gardez cette distinction à l'esprit avant de traiter plusieurs programmes dont les débuts de noms se ressemblent.

Pour un service supervisé, utilisez de préférence son mécanisme d'arrêt habituel. Une terminaison directe peut être suivie d'un redémarrage automatique. SIGTERM laisse au programme la possibilité de traiter sa fermeture ; un signal de terminaison forcée ne lui donne pas la même possibilité de nettoyage.

La page officielle de killall du projet psmisc détaille la sélection et les limites de l'attente. Vérifiez la documentation locale avant toute intervention sur un système différent.