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é :
-
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. -
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