
Ich habe einen Job, bei dem 2–5 Kopien eines Befehls auf Ubuntu Server 14.04 erstellt werden.
kill
Ich versuche, die einfachste Lösung für alle zu finden (also möglichst eine einzelne Befehlszeile statt eines Skripts) . Der eigentliche Trick ist, dass ichAnsibleum Ad-hoc-Befehle an Dutzende von Servern zu senden. Deshalb ist das Aufrufen jedes einzelnen Prozesses zeitaufwändig.
Beispiel:
ps aux | grep bash
user 1031 0.0 0.0 4444 652 ? Ss Aug15 0:00 /bin/sh -c /home/user/start-cacheable.bash
user 1032 0.0 0.1 12400 1432 ? S Aug15 0:00 /bin/bash /home/user/start-cacheable.bash
user 1327 0.0 0.3 12744 2254 tty1 S Aug15 0:00 -bash
Von hier aus würde ich jetzt ausführen kill 1031 1032
. Gibt es einen einfachen Befehl, mit dem sich die Aufgabe erledigen lässt?
Antwort1
Die Antwort von @jjlin könnte funktionieren.
Aber um die Funktionsweise von pgrep/pkill
und zu erklären killall
:
killall sucht nachProzessnamennur - das ist der Teil, der in/proc/<pid>/comm
pgrep/pkill macht standardmäßig dasselbe, kann aber auch nach einer Übereinstimmung in Argumenten suchen (-f), was eine Übereinstimmung mit/proc/<pid>/cmdline
Grundsätzlich werden standardmäßig nur die in angezeigten Zeichenfolgen ps -A
berücksichtigt.
Beispiel:
process name (comm): sshd
full command/arguments (cmdline): /usr/sbin/sshd -f /etc/ssh/sshd_config
jetzt - kilall/pkil sshd
würde funktionieren (absichtliche Tippfehler, mach das nicht ;),
aber killall /usr/sbin/sshd
würdeNicht arbeitenda der Pfad nicht Teil des Prozessnamens ist,
können Sie ihn mit pgrep -lf sshd_config
(zB pkill -f) überprüfen.
Dann sind noch folgende Dinge zu berücksichtigen: Killall
Möglicherweise stimmt nur einer der ersten 15 Bytes eines Befehlsnamens überein (siehe killall -e
), es sind reguläre Ausdrücke erforderlich oder Sie möchten Prozessgruppen usw. nutzen.
Hinweis: Die /proc/...-Dateien sind durch Nullen getrennt, seien Sie also vorsichtig beim Kopieren/Einfügen
Antwort2
Dies kannst du verwenden.
ps aux | grep <your keyword> | grep -v grep | awk '{print $2}' | xargs kill -9
Listet übereinstimmende Prozesse auf, filtert den Grep-Prozess selbst heraus, greift auf die PID zu und übergibt sie an kill -9.
Testen Sie, bevor Sie kill -9 verwenden
Antwort3
Versuchen
pkill start-cacheable.bash
Antwort4
Sie können
killall <process name>