it-swarm.com.de

Wie beendet man alle Prozesse, die mit einem Namen übereinstimmen?

Angenommen, ich möchte jeden Prozess beenden, der das Wort Amarok enthält. Ich kann die Befehle ausdrucken, die ich ausführen möchte. Aber wie lasse ich die Shell tatsächlich ausführen? dh.

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

Von man 1 pkill

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

Was bedeutet zum Beispiel, wenn wir diese Zeilen in ps aux sehen:

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

Wir können sie alle mit der Option pkill -f töten:

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

xargs (1): xargs - Argumentliste (n) erstellen und Dienstprogramm ausführen. Hilfreich, wenn Sie Argumente an etwas wie kill oder ls oder so weitergeben möchten.

183
Nektarios

verwenden Sie pgrep

kill -9 $(pgrep amarok)
43
Eric Fortis

Der sichere Weg, dies zu tun, ist:

pkill -f amarok
23

Ich denke, dass dieser Befehl killall genau das ist, was Sie brauchen ... Der Befehl wird als "Kill-Prozesse nach Namen" beschrieben. Er ist einfach zu bedienen. Zum Beispiel

killall chrome

Dieser Befehl bricht den gesamten Prozess von Chrome ab. Hier ist ein Link zum Befehl killall

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

Ich hoffe, dieser Befehl könnte Ihnen helfen.

15
androidyue

pkill -x stimmt genau mit dem Prozessnamen überein.

pkill -x amarok

pkill -f ist ähnlich, erlaubt aber ein reguläres Ausdrucksmuster.

Beachten Sie, dass pkill ohne andere Parameter (z. B. -x, -f) eine teilweise Übereinstimmung der Prozessnamen zulässt. "Pkill amarok" würde also amarok, amarokBanana, bananaamarok usw. töten.

Ich wünschte, x wäre das Standardverhalten!

11
user79878

Wenn Sie die Ausgabe eines Befehls ausführen möchten, können Sie ihn in $(...) einfügen. Für Ihre spezifische Aufgabe sollten Sie jedoch die Befehle killall und pkill betrachten.

4
Chen Levy

try kill -s 9 ps -ef |grep "Nov 11" |grep -v grep | awk '{print $2}'Um Prozesse vom 11. November zu beenden oder kill -s 9 ps -ef |grep amarok|grep -v grep | awk '{print $2}' Um Prozesse zu beenden, die das Word amarok enthalten

3
Victor Marrerp

Sie können Ihre Ausgabe auch als Unterprozess auswerten, indem Sie alles mit einem Häkchen umgeben oder in $ () einfügen:

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

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

Vielleicht fügen Sie die Befehle zur ausführbaren Datei hinzu, setzen Sie die Berechtigung + x und führen Sie dann die Ausführung aus.

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

Wenn Sie cygwin oder eine minimale Shell verwenden, der killall fehlt, können Sie einfach dieses Skript verwenden:

killall.sh - Nach Prozessnamen töten.

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

Verwendungszweck:

$ killall <process name>
0
Tony O'Hagan