So stoppen Sie eine Reihe von Prozessen unter Unix schnell.
Ich kann ps
/ top
, kill
.
Wenn die Anzahl der Prozesse sehr groß ist, verwende ich ein Shell-Skript. Gibt es andere Möglichkeiten, nur ein oder zwei Unix-Befehle können es gut machen?
So stoppen Sie eine Reihe von Prozessen unter Unix schnell.
Ich kann ps
/ top
, kill
.
Wenn die Anzahl der Prozesse sehr groß ist, verwende ich ein Shell-Skript. Gibt es andere Möglichkeiten, nur ein oder zwei Unix-Befehle können es gut machen?
Antworten:
Meine Wahl ist pkill/pgrep
pgrep -a curl
alle Prozesse aus, die von beendet werden pkill
. Wenn alles gut aussieht, verwenden Sie pkill curl
.
Hier ist ein kleines Online-Bash-Skript, das ich verwende:
ps auxwww | grep -v grep | grep -i $1 | awk '{print $2}' | xargs kill -9
Ich beende alle Prozesse, deren Name den ersten Parameter enthält (ohne Berücksichtigung der Groß- und Kleinschreibung). Die Aufteilung jedes Teils ist:
ps auxwww
druckt alle Prozesse mit einem sehr breiten "Befehls" -Feldgrep -v grep
ist da, um sich vom Töten auszuschließengrep -i $1
stimmt mit allen Zeilen überein, die den ersten Parameter enthaltenawk '{print $2}'
greift auf alle Prozess-IDs zuxargs kill -9
Bricht alle ausgewählten Prozesse abfgrep
(keine Regex)
pkill -9 -f $1
. Empfehlen Sie auch nicht, Signal 9 (KILL) zu verwenden. Dies ist ein letzter Ausweg, um einen Prozess zu stoppen, und nicht einer, der routinemäßig angewendet werden sollte.
Psdoom ist wirklich der einzige Weg, einen Prozess zu beenden. http://psdoom.sourceforge.net/
Sehr schnelle Möglichkeit, mehrere Prozesse abzubrechen (ohne ein Skript schreiben zu müssen)
USAGE: ./autokill.kl.sh <proc-name> => This will give you 5 seconds to change your mind and control-C out of the program.
USAGE: ./autokill.kl.sh <proc-name> now => This will immediately kill all processes matching the string/pattern you specified!!!
MODEL: ./autokill.kl.sh httpd
MODEL: ./autokill.kl.sh httpd now
MODEL: ./autokill.kl.sh httpd view => This will only show you the list of processes matching the pattern you specified.
Das Skript kann hier direkt heruntergeladen werden .
Ich bevorzuge es wirklich, den Befehl pgrep / pkill zu verwenden. Hier ist ein Beispiel:
[root@testrhel7 ~]# pgrep -l http
2967 httpd
2968 httpd
2969 httpd
2970 httpd
2971 httpd
2972 httpd
[root@testrhel7 ~]#
[root@testrhel7 ~]# pkill -e http
httpd killed (pid 2967)
httpd killed (pid 2968)
httpd killed (pid 2969)
httpd killed (pid 2970)
httpd killed (pid 2971)
httpd killed (pid 2972)
[root@testrhel7 ~]#
Natürlich können Sie einen for-Zyklus verwenden:
[root@testrhel7 ~]# ps -ef |grep http| grep -v grep
root 2989 1 0 16:06 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2990 2989 0 16:06 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2991 2989 0 16:06 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2992 2989 0 16:06 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2993 2989 0 16:06 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2994 2989 0 16:06 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
[root@testrhel7 ~]#
[root@testrhel7 ~]# for i in $(ps -ef | awk '/http/ {print $2}'); do kill -9 $i; done
Ich hoffe das war hilfreich, fröhliches Töten.