GNU/Linux >> Tutoriels Linux >  >> Linux

Comment tuer tous les processus avec un nom partiel donné ?

Si vous avez besoin de plus de flexibilité dans la sélection des processus, utilisez

for KILLPID in `ps ax | grep 'my_pattern' | awk ' { print $1;}'`; do 
  kill -9 $KILLPID;
done

Vous pouvez utiliser grep -e etc.


Tuer tous les processus correspondant à la chaîne "myProcessName" :

ps -ef | grep 'myProcessName' | grep -v grep | awk '{print $2}' | xargs -r kill -9

Source :http://www.commandlinefu.com/commands/view/1138/ps-ef-grep-process-grep-v-grep-awk-print-2-xargs-kill-9

Pourquoi "ps pipe kill" du terminal est mauvais :

La tuyauterie des entiers que vous avez extraits de ps -ef à kill -9 est mauvais, et vous devriez vous sentir mal, doublement si vous êtes root ou un utilisateur avec des privilèges élevés, car cela ne donne pas à votre processus une chance d'arrêter proprement les connexions de socket, de nettoyer les fichiers temporaires, d'informer ses enfants qu'il va disparaître ou réinitialiser les caractéristiques de son terminal.

Au lieu de cela, envoyez 15, et attendez une seconde ou deux, et si cela ne fonctionne pas, envoyez 2, et si cela ne fonctionne pas, envoyez 1. Si cela ne fonctionne pas, SUPPRIMEZ LE BINAIRE car le programme se comporte mal.

En règle générale, nous n'utilisons pas Unix Railgun pour tailler les haies. https://porkmail.org/era/unix/award.html#kill

Explication de la commande ci-dessus :

ps -ef produit une liste d'identifiants de processus sur l'ordinateur visible par cet utilisateur. Le pipe grep filtre cela pour les lignes contenant cette chaîne. Le grep -v grep dit ne correspond pas au processus lui-même faisant le grepping. Le tuyau awk print indique de diviser les lignes sur l'espace blanc du délimiteur par défaut et de filtrer sur la deuxième colonne qui est notre identifiant de processus. Le tuyau xargs lance un nouveau processus pour envoyer tous ces pid à kill -9 , les mettant tous fin.

Pourquoi ps pipe kill est mauvais, dangereux, laid et piraté :

  1. Il y a une petite possibilité que vous arrêtiez accidentellement le système d'exploitation ou que vous provoquiez un comportement indéfini dans un processus non lié, entraînant une instabilité de l'ensemble du système car ps -ef répertorie des milliers de processus, et vous ne pouvez pas être sûr qu'un processus tiers partage votre nom de processus, ou que dans le laps de temps entre la lecture et l'exécution de kill -9, l'ID de processus a changé pour autre chose, et maintenant vous avez terminé certains aléatoires processus nécessaire sans rapport avec le vôtre.

  2. Si le code en cours de fermeture forcée effectue des opérations de base de données ou des transactions sécurisées avec des conditions de concurrence à faible probabilité, une fraction de pour cent du temps, l'atomicité de cette transaction sera détruite, produisant un comportement indéfini. kill -9 ne fait aucun prisonnier. Si votre code est sensible à cela, essayez de remplacer le xargs kill partie avec un indicateur transmis qui demande un arrêt progressif, et seulement si cette demande est refusée, dernier recours à kill -9

Mais, si vous comprenez tous les risques et contrôlez-les avec des noms uniques, et que vous êtes d'accord avec quelques transactions abandonnées ou une corruption occasionnelle, alors 99,9% du temps ça ira. S'il y a un problème, redémarrez l'ordinateur, assurez-vous qu'il n'y a pas de collisions de processus. C'est à cause d'un code comme celui-ci qui fait du script de support technique :"Avez-vous essayé de redémarrer votre ordinateur" un mème de niveau 5. "Un robot voyou a récupéré ps pour trouver des entiers et les envoyer à kill -9 , redémarrez donc l'ordinateur pour résoudre le problème.

Pourquoi ne pas simplement utiliser pkill lequel est le plus simple ?

Ce qui précède me donne un contrôle manuel car ps , grep , awk , kill et xargs sont des standards multiplateformes. Il donne un contrôle total sur le moteur regex à utiliser, la partie du nom du processus à faire correspondre, la gestion de la sensibilité à la casse et la gestion des exceptions.

pkill -f -e -c myProcessName

Fait la même chose pour moi, mais voir man pkill a des comportements, des drapeaux et des moteurs de regex différents entre les variantes de Linux, Mac, Zune-Bash et mon routeur open source. Alors oui, mettez votre Unix-Railgun de 35 000 watts entre les mains compétentes de pkill pour tailler les haies. Voyez ce qui se passe.


Utilisez pkill -f , qui correspond au modèle pour n'importe quelle partie de la ligne de commande

pkill -f my_pattern

Au cas où cela ne fonctionnerait pas, essayez également d'utiliser celui-ci :

pkill -9 -f my_pattern

Linux
  1. Comment puis-je tuer un processus par nom au lieu de PID?

  2. Comment trouver tous les processus enfants ?

  3. Comment tuer un processus enfant après un délai d'attente donné dans Bash?

  4. Comment tuer tous les processus d'arrière-plan dans zsh ?

  5. Comment tuer tous les processus PHP-FPM en une seule ligne de commande

Comment tuer un processus sous Linux

Comment tuer les processus Zombie sous Linux

Comment localiser et tuer un processus avec un terminal Linux

Comment tuer les processus zombies dans Ubuntu 20.04 LTS

Comment tuer les processus zombies dans Ubuntu

Comment tuer les processus sous Linux en utilisant kill, killall et pkill