Ich führe ein Kommando aus ps -A | grep <application_name>
und erhalte eine Liste von Prozessen wie folgt:
19440 ? 00:00:11 <application_name>
21630 ? 00:00:00 <application_name>
22694 ? 00:00:00 <application_name>
Ich möchte alle Prozess aus der Liste töten: 19440
, 21630
, 22694
.
Ich habe es versucht, ps -A | grep <application_name> | xargs kill -9 $1
aber es funktioniert mit Fehlern.
kill: illegal pid ?
kill: illegal pid 00:00:00
kill: illegal pid <application_name>
Wie kann ich das anmutig tun?
nano /usr/bin/ffmpegk
. . . .ps -A | grep ffmpeg | awk '{print $1}' | xargs kill -9 $1
. . . .chmod a+rx /usr/bin/ffmpegk
kill -9
wenn kein Prozess übereinstimmtgrep
sollten Sie verwendenawk
, um auf den Namen zu passen:ps -A | awk "\$4 == \"$1\" { print \$1; }"
killall
kann das tun.quelle
killall --regexp "appl.*me"
Es kann jedoch verschiedene Killall-Implementierungen geben. Sehenman killall
.kill -9 pid
abzubrechen , und selbst wenn ich es nicht schaffe, ist @ ŁukaszD.Tulikowski die beste Arbeitslösung speziell für Bash-Skripte.quelle
Mein Ansatz ist dem von @
Łukasz D. Tulikowski
ähnlich. Anstatt zu benutzengrep <application_name>
; Ich habe verwendetgrep "[a]pplication_name"
, was nicht mit seiner eigenen Prozessbefehlszeile übereinstimmt.Der Ausdruck in eckigen Klammern ist Teil des
grep
Zeichenklassen-Mustervergleichs. (Referenz) .Sie können verwenden
awk
, um zuerst eineps
Ausgabespalte abzurufen.Gibt eine Liste der PIDs zurück
Beim späteren Hinzufügen haben
kill -9 $1
Sie einen Befehl, der alle PIDs löschtquelle
grep
anstattawk
den Test korrekter zu machen?grep
Entspricht beispielsweise Namen, die das Ziel als Teilzeichenfolge enthalten.