Der Befehl pkill sendet Signale an Prozesse basierend auf deren Namen oder anderen Attributen. Anders als bei kill brauchst du keine Prozess-ID (PID) zu kennen.
pkill gehört zum procps-Paket und ist auf den meisten Systemen vorinstalliert. Der Befehl arbeitet intern mit pgrep zusammen, das passende Prozesse findet.
Syntax des pkill-Befehls
pkill [OPTIONEN] MUSTER
OPTIONEN- Flags, die das Verhalten ändern (Signal, Benutzer, etc.).MUSTER- Ein erweiterter regulärer Ausdruck, der auf Prozessnamen passt.
Grundlegende Verwendung
Ohne weitere Optionen sendet pkill das Signal TERM (15) an alle Prozesse, deren Name zum Muster passt:
pkill firefox
Der Befehl gibt den Exit-Code 0 zurück, wenn mindestens ein Prozess gefunden wurde, sonst 1. Das ist nützlich für Shell-Skripte.
Signale senden
Mit der Option --signal oder einem vorangestellten Signalnamen sendest du ein bestimmtes Signal:
pkill -HUP nginx
pkill --signal KILL firefox
pkill -9 chrome
Die wichtigsten Signale:
| Signal | Nummer | Wirkung |
|---|---|---|
HUP | 1 | Prozess neu starten (Konfiguration neu laden) |
TERM | 15 | Prozess ordentlich beenden (Standard) |
KILL | 9 | Prozess sofort beenden (erzwungen) |
Eine vollständige Liste aller Signale erhältst du mit kill -l.
Signale kannst du auf drei Arten angeben:
- Als Zahl:
-9 - Mit
SIG-Präfix:-SIGKILL - Ohne Präfix:
-KILL
Prozesse vor dem Beenden prüfen
pkill verwendet reguläre Ausdrücke. Bevor du Prozesse beendest, prüfe mit pgrep, welche Prozesse betroffen sind:
pgrep ssh
Ausgabe:
1039
2257
6850
Das zeigt alle Prozesse, die ssh im Namen enthalten - auch sshd oder ssh-agent.
Exakte Übereinstimmung erzwingen
Um nur Prozesse zu beenden, deren Name exakt dem Muster entspricht, verwende Regex-Anker:
pkill '^ssh$'
Das Caret (^) markiert den Zeilenanfang, das Dollarzeichen ($) das Ende. So triffst du nur ssh, nicht sshd oder ssh-agent.
Vollständige Befehlszeile durchsuchen
Standardmäßig vergleicht pkill nur den Prozessnamen. Mit -f durchsuchst du die gesamte Befehlszeile inklusive Argumenten:
pkill -9 -f "ping 8.8.8.8"
Bei Befehlen mit Leerzeichen musst du den gesamten Ausdruck in Anführungszeichen setzen.
Nach Benutzer filtern
Mit -u filterst du Prozesse eines bestimmten Benutzers:
pkill -u mark
Mehrere Benutzer trennst du mit Kommas:
pkill -u mark,danny
Optionen kombinieren
Du kannst mehrere Filter kombinieren. Dieses Beispiel sendet KILL an alle gnome-Prozesse des Benutzers mark:
pkill -9 -u mark gnome
Neueste oder älteste Prozesse beenden
Mit -n (newest) triffst du nur den zuletzt gestarteten Prozess, mit -o (oldest) den ältesten:
pkill -9 -n screen
Das beendet nur die neueste screen-Session, nicht alle.
Zusammenfassung
Der Befehl pkill beendet Prozesse anhand ihres Namens statt der PID. Mit Optionen wie -u für Benutzer, -f für die vollständige Befehlszeile oder -n/-o für zeitliche Filterung lassen sich Prozesse gezielt auswählen. Verwende pgrep mit denselben Optionen, um vor dem Beenden zu prüfen, welche Prozesse betroffen sind.