Beenden Sie mehrere Prozesse nach Namen statt nach PID

Beenden Sie mehrere Prozesse nach Namen statt nach PID

Ich habe einen Job, bei dem 2–5 Kopien eines Befehls auf Ubuntu Server 14.04 erstellt werden.

killIch 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/pkillund 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 -Aberücksichtigt.

Beispiel:

process name (comm): sshd
full command/arguments (cmdline): /usr/sbin/sshd -f /etc/ssh/sshd_config

jetzt - kilall/pkil sshdwürde funktionieren (absichtliche Tippfehler, mach das nicht ;),
aber killall /usr/sbin/sshdwü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: KillallMö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>

verwandte Informationen