web-dev-qa-db-fra.com

Comment tuer tous les processus correspondant à un nom?

Dites que je veux tuer tous les processus contenant le mot amarok. Je peux imprimer les commandes que je veux exécuter. Mais comment puis-je obliger Shell à les exécuter? c'est à dire.

ps aux | grep -ie amarok | awk '{print "kill -9 " $2}'
Output:
kill -9 3052
kill -9 3071
kill -9 3076
kill -9 3077
kill -9 3079
kill -9 3080
kill -9 3082
kill -9 3083
kill -9 3084
kill -9 3085
kill -9 3086
kill -9 3087
kill -9 3088
kill -9 3089
kill -9 4031
207
PuercoPop

De man 1 pkill

-f     The pattern is normally only matched against the process name.
       When -f is set, the full command line is used.

Ce qui signifie, par exemple, si nous voyons ces lignes dans ps aux:

Apache   24268  0.0  2.6 388152 27116 ?        S    Jun13   0:10 /usr/sbin/httpd
Apache   24272  0.0  2.6 387944 27104 ?        S    Jun13   0:09 /usr/sbin/httpd
Apache   24319  0.0  2.6 387884 27316 ?        S    Jun15   0:04 /usr/sbin/httpd

Nous pouvons tous les tuer en utilisant l'option pkill -f:

pkill -f httpd
342
Tim Bielawa
ps aux | grep -ie amarok | awk '{print $2}' | xargs kill -9 

xargs (1): xargs - construit une liste d'arguments et exécute un utilitaire. Utile lorsque vous souhaitez canaliser des arguments vers kill ou ls ou autre.

183
Nektarios

utiliser pgrep

kill -9 $(pgrep amarok)
43
Eric Fortis

Le moyen le plus sûr de le faire est:

pkill -f amarok
23

Je pense que cette commande killall est exactement ce dont vous avez besoin . La commande est décrite comme "tuer les processus par leur nom". Elle est facile à utiliser.

killall chrome

Cette commande va tuer tous les processus de Chrome. Voici un lien vers la commande killall

http://linux.about.com/library/cmd/blcmdl1_killall.htm

J'espère que cette commande pourrait vous aider.

15
androidyue

pkill -x correspond exactement au nom du processus.

pkill -x amarok

pkill -f est similaire mais permet un modèle d'expression régulière.

Notez que pkill sans autres paramètres (par exemple -x, -f) autorisera des correspondances partielles sur les noms de processus. Alors "pkill amarok" tuerait amarok, amarokBanana, bananaamarok, etc.

Je souhaite -x était le comportement par défaut!

11
user79878

Si vous souhaitez exécuter la sortie d'une commande, vous pouvez la placer dans $(...). Toutefois, pour votre tâche spécifique, jetez un coup d'œil aux commandes killall et pkill.

4
Chen Levy

try kill -s 9 ps -ef |grep "Nov 11" |grep -v grep | awk '{print $2}'Pour tuer les processus du 11 novembre .__ ou kill -s 9 ps -ef |grep amarok|grep -v grep | awk '{print $2}' pour tuer les processus contenant le mot amarok

3
Victor Marrerp

Vous pouvez également évaluer votre sortie en tant que sous-processus, en entourant tout ce qui est en arrière ou en le mettant dans $ ():

`ps aux | grep -ie amarok | awk '{print "kill -9 " $2}'`

 $(ps aux | grep -ie amarok | awk '{print "kill -9 " $2}')     
3
dandrews

Peut-être que l’ajout des commandes au fichier exécutable, la définition de l’autorisation + x, puis l’exécution?

ps aux | grep -ie amarok | awk '{print "kill -9 " $2}' > pk;chmod +x pk;./pk;rm pk
0
vova7865

Si vous utilisez cygwin ou un shell minimal dépourvu de killall, vous pouvez utiliser ce script:

killall.sh - Tue par nom de processus.

#/bin/bash
ps -W | grep "$1" | awk '{print $1}' | xargs kill -f;

Usage:

$ killall <process name>
0
Tony O'Hagan