killall-Befehl: Prozesse per Name beenden, das Signal -9 und psmisc installieren
Der Befehl killall ist ein Linux-Befehl, der laufende Prozesse statt über die Prozessnummer (PID) über den Programmnamen auswählt und ihnen ein Signal sendet; gibst du kein Signal an, sendet er SIGTERM (laut offiziellem Handbuch). Da er alle Prozesse mit demselben Namen auf einmal beendet, haben wir auf einem AlmaLinux 9 Server zuerst mit pgrep und ps vier Prozesse geprüft, die aus unter anderen Namen kopierten sleep-Dateien gestartet wurden. Bei einer ausführbaren Datei mit mehr als 15 Zeichen blieben im Prozessnamen nur die ersten 15 Zeichen übrig.
killall haben wir nur auf xxsleep-Prozesse angewendet, die zum Testen unter einem normalen Konto auf einem Debian 12 Server gestartet wurden. Die Ergebniskästen zeigen die Ausgabe von rpm, pgrep, ps, pidof, cat und kill, ausgeführt mit dem root-Konto auf einem AlmaLinux 9.8 Server, sowie die Ausgabe von killall auf dem Debian 12 Server. Prozessnummern (PID), Prozessnamen, Pfade der ausführbaren Dateien und Kontonamen wurden durch Beispielwerte ersetzt.
1️⃣ killall-Befehl installieren
killall gehört zum Paket psmisc. Als wir auf einem AlmaLinux 9.8 Server mit rpm prüften, zu welchem Paket /usr/bin/killall gehört, erschien die Version psmisc 23.4.
rpm -qf --qf '%{NAME} %{VERSION}\n' /usr/bin/killallpsmisc 23.4In der mit rpm -ql angezeigten Dateiliste desselben Pakets waren auch pstree und fuser enthalten.
Erscheint [command not found], also dass der Befehl nicht gefunden wird, installiere das Paket psmisc. In der RHEL-Familie lautet das [dnf install psmisc], in der Debian-Familie [apt install psmisc]. Auf dem Debian 12 Server war psmisc 23.6 bereits installiert, und killall lag unter /usr/bin/killall.
Auf dem AlmaLinux 9.8 Server zeigte sich, dass das ähnlich benannte pkill im Paket procps-ng steckt und kill ein in die Shell eingebauter Befehl ist.
2️⃣ So verwendest du den killall-Befehl
Die Grundform ist [killall Prozessname]. Er sucht alle laufenden Prozesse mit dem angegebenen Namen und sendet ihnen ein Signal; gibst du mehrere Namen an, macht er dasselbe für jeden Namen (laut offiziellem Handbuch).
Da Prozesse mit demselben Namen alle gleichzeitig enden, prüfe zuerst mit pgrep, was unter diesem Namen läuft. Wir haben sleep in einen Arbeitsordner unter den Namen xxsleep-a1, xxsleep-a2 und xxsleep-longname-x1 kopiert, xxsleep-a1 zweimal gestartet, also insgesamt vier Prozesse, und dann mit -l Nummern und Namen ausgegeben.
pgrep -l xxsleep2141 xxsleep-a1
2142 xxsleep-a1
2150 xxsleep-a2
2155 xxsleep-longnamIn der vierten Zeile heißt die ausführbare Datei xxsleep-longname-x1, der Prozessname war aber bei xxsleep-longnam abgeschnitten.
Mit -a erscheint die gesamte ausgeführte Befehlszeile. Die beiden gleichnamigen xxsleep-a1 haben wir am letzten Argument in Sekunden unterschieden, 300 und 310.
pgrep -a xxsleep2141 /root/work/xxsleep-a1 300
2142 /root/work/xxsleep-a1 310
2150 /root/work/xxsleep-a2 320
2155 /root/work/xxsleep-longname-x1 330Um nur Prozesse zu finden, deren Name genau übereinstimmt, hängst du -x an. Das Ergebnis für xxsleep-a1 waren zwei Nummern.
pgrep -x xxsleep-a12141
2142Wenn du einen Namen unverändert eingibst und nur die Nummern prüfen willst, nimmst du pidof. Die Suche nach xxsleep-a1 gab beide Nummern in einer Zeile aus.
pidof xxsleep-a12142 2141ps gibt nur Prozesse mit genau übereinstimmendem Namen aus, wenn du nach -C mehrere Namen durch Kommas getrennt angibst.
ps -o pid,comm -C xxsleep-a1,xxsleep-a2 PID COMMAND
2141 xxsleep-a1
2142 xxsleep-a1
2150 xxsleep-a2Auf dem Debian 12 Server haben wir vier Prozesse unter denselben Namen gestartet und [killall xxsleep-a1] ausgeführt: Es gab nichts aus und endete mit Exit-Code 0. Bei der erneuten Suche mit pgrep waren beide xxsleep-a1 verschwunden, und nur xxsleep-a2 und xxsleep-longname-x1 waren übrig. Gibst du statt eines Namens einen Pfad mit Schrägstrich (/) an, wählt er unabhängig vom Namen die Prozesse, die diese Datei ausführen (laut offiziellem Handbuch).
Beim nicht vorhandenen Namen xxsleep-zz erschien eine Zeile mit [no process found] hinter dem Namen, und der Befehl endete mit Exit-Code 1. Der Exit-Code ist nur dann 0, wenn für jeden angegebenen Namen mindestens ein Prozess beendet wurde (laut offiziellem Handbuch).
killall xxsleep-zzxxsleep-zz: no process foundWillst du nur einen einzelnen Prozess beenden, dessen Nummer du kennst, sendest du mit dem Linux-Befehl kill nur an diese Nummer ein Signal.
3️⃣ Optionen des killall-Befehls
Als wir den Namen des als xxsleep-longname-x1 gestarteten Prozesses aus /proc/PID/comm lasen, waren nur die ersten 15 Zeichen übrig: xxsleep-longnam.
cat /proc/2155/commxxsleep-longnamWir haben pgrep mit dem 16 Zeichen langen xxsleep-longname ausgeführt.
pgrep -a xxsleep-longnameEs endete ohne Ausgabe mit Exit-Code 1, und bei der erneuten Suche mit dem 15 Zeichen langen xxsleep-longnam erschien dieser Prozess.
pgrep -l xxsleep-longnam2155 xxsleep-longnamBekommt killall einen Namen mit mehr als 15 Zeichen und gibt es Prozesse, deren vollständigen Namen er nicht lesen kann, nimmt er alle Prozesse, bei denen die ersten 15 Zeichen passen; mit -e überspringt er solche Einträge (laut offiziellem Handbuch). Als wir auf dem Debian 12 Server mit -e und -v die ersten 15 Zeichen xxsleep-longnam angaben, erschienen Zeilen, dass drei andere Prozesse mit nach 15 Zeichen abgeschnittenem Namen übersprungen wurden, und der Befehl endete mit [no process found].
killall -e -v xxsleep-longnamkillall: skipping partial match quota_events_un(37)
killall: skipping partial match acpi_thermal_pm(112)
killall: skipping partial match ext4-rsv-conver(246)
xxsleep-longnam: no process foundMit dem vollständigen Namen xxsleep-longname-x1 folgte auf dieselben Überspringen-Zeilen eine Zeile, dass an diesen Prozess ein Signal gesendet wurde.
killall -e -v xxsleep-longname-x1killall: skipping partial match quota_events_un(37)
killall: skipping partial match acpi_thermal_pm(112)
killall: skipping partial match ext4-rsv-conver(246)
Killed xxsleep-longname-x1(2155) with signal 15Mit -v erschien für jeden Prozess, an den ein Signal ging, eine Zeile mit Name, Nummer und Signalnummer.
killall -v xxsleep-a2Killed xxsleep-a2(2150) with signal 15-i fragt bei jedem Prozess, ob er beendet werden soll. Wir haben zwei xxsleep-a1 erneut gestartet und y und n nacheinander über die Standardeingabe übergeben: Die beiden Fragen erschienen hintereinander in einer Zeile, nur das erste xxsleep-a1 wurde beendet, das zweite blieb.
printf 'y\nn\n' | killall -i xxsleep-a1Kill xxsleep-a1(2171) ? (y/N) Kill xxsleep-a1(2172) ? (y/N)-u wählt nur Prozesse, die diesem Konto gehören; lässt du den Namen weg, sind alle Prozesse dieses Kontos das Ziel. Als wir nach dem Kontonamen auch xxsleep-a1 angaben, ging das Signal nur an das verbliebene xxsleep-a1.
killall -v -u user xxsleep-a1Killed xxsleep-a1(2172) with signal 15-o und -y wählen nach der Startzeit; die Zeit schreibst du als Zahl mit einer Einheit s, m, h, d, w, M oder y dahinter, etwa [-o 30m].
-r liest Namen als erweiterte reguläre Ausdrücke. Mit dem Muster ^xxsleep-a in pgrep erschienen drei Prozesse, die mit xxsleep-a beginnen.
pgrep -l '^xxsleep-a'2141 xxsleep-a1
2142 xxsleep-a1
2150 xxsleep-a2-w wartet und prüft jede Sekunde, bis alle Prozesse, an die ein Signal ging, verschwunden sind. Ignoriert ein Prozess das Signal oder bleibt er als Zombie zurück, kann killall endlos warten.
Die erste Tabelle unten enthält die Prüfbefehle und killall-Optionen, die in diesem Beitrag tatsächlich ausgeführt wurden; die nicht ausgeführten killall-Optionen stehen in der zweiten Tabelle laut offiziellem Handbuch.
📌 Prozesse prüfen und killall: Ergebnisse aus diesem Beitrag
| Befehl | Was es tut | Ergebnis in diesem Artikel | |
|---|---|---|---|
| pgrep -l Name | Nummer und Name der Prozesse, deren Name ihn enthält | Vier Zeilen für xxsleep, der lange Name nur bis zu den ersten 15 Zeichen xxsleep-longnam sichtbar | |
| pgrep -a Name | Nummer und gesamte Befehlszeile | Die beiden gleichnamigen xxsleep-a1 am letzten Argument 300 und 310 unterschieden | |
| pgrep -x Name | Nur Nummern der Prozesse mit genau übereinstimmendem Namen | Für xxsleep-a1 zwei Zeilen: 2141 und 2142 | |
| pidof Name | Nummern, die unter diesem Namen laufen, in einer Zeile | Für xxsleep-a1 2142 2141 | |
| ps -o pid,comm -C Name | Nummer und Name der Prozesse mit genau übereinstimmendem Namen, mehrere Namen durch Kommas getrennt | Zwei Zeilen xxsleep-a1 und eine Zeile xxsleep-a2 | |
| cat /proc/PID/comm | Prozessname (bis zu den ersten 15 Zeichen) | 2155 ist xxsleep-longnam | |
| killall Name | SIGTERM an Prozesse mit diesem Namen | Beide xxsleep-a1 beendet, Exit-Code 0; der nicht vorhandene Name xxsleep-zz gab no process found und Exit-Code 1 | |
| killall -e Name | Namen mit mehr als 15 Zeichen nur, wenn der vollständige Name passt | xxsleep-longnam gab no process found, xxsleep-longname-x1 beendet | |
| killall -v Name | Gibt für jeden Prozess, an den ein Signal ging, das Ergebnis aus | Killed xxsleep-a2(2150) with signal 15 | |
| killall -i Name | Fragt vor dem Beenden bei jedem Prozess nach | Mit y und n wurde nur das erste xxsleep-a1 beendet | |
| killall -u Kontoname | Nur Prozesse, die diesem Konto gehören | Zusammen mit einem Namen angegeben, nur xxsleep-a1 dieses Kontos beendet | |
| killall -9 Name | SIGKILL statt SIGTERM | Killed xxsleep-a2(2173) with signal 9 |
📎 Weitere Optionen: laut offiziellem Handbuch
| Option | Was es tut | |
|---|---|---|
| -I, --ignore-case | Namen ohne Unterscheidung von Groß- und Kleinschreibung vergleichen | |
| -g, --process-group | Signal an die Prozessgruppe statt an den Prozess (einmal pro Gruppe) | |
| -l, --list | Liste der bekannten Signalnamen | |
| -n, --ns PID | Nur Prozesse im selben PID-Namensraum wie diese PID, standardmäßig alle Namensräume | |
| -o, --older-than Zeit | Nur Prozesse, die vor dieser Zeit gestartet wurden (Einheiten s, m, h, d, w, M, y) | |
| -q, --quiet | Keine Meldung, auch wenn kein Prozess beendet wurde | |
| -r, --regexp | Namen als erweiterte reguläre Ausdrücke lesen | |
| -s, --signal Signal | Signal, das statt SIGTERM gesendet wird | |
| -V, --version | Versionsinformationen ausgeben | |
| -w, --wait | Warten, bis alle Prozesse, an die ein Signal ging, verschwunden sind | |
| -y, --younger-than Zeit | Nur Prozesse, die nach dieser Zeit gestartet wurden | |
| -Z, --context Muster | Nur Prozesse, deren Sicherheitskontext zum erweiterten regulären Muster passt; vor anderen Argumenten angeben; der Name kann entfallen |
🔲 Simulator für den killall-Befehl
Der Simulator unten startet mit einer Liste aus den vier xxsleep-Prozessen und dem xxsleep-a2 des Beispielkontos user1. Tippe auf die Chips, um zu vergleichen, welche Zeilen mit [killall -v], [-i] und [-u] aus der Liste verschwinden; die Ausgabetexte von killall ahmen die Ausgabe vom Debian 12 Server nach.
4️⃣ killall-Signale
Das zu sendende Signal gibst du per Name an, etwa [-HUP] oder [-SIGHUP], per Nummer, etwa [-1], oder nach der Option -s (laut offiziellem Handbuch). [killall -9 Prozessname] sendet das Signal 9, SIGKILL. SIGKILL kann ein Prozess weder abfangen noch ignorieren (laut offiziellem Handbuch), daher endet der Prozess, ohne aufräumen zu können. Deshalb sendest du es, wenn das Standardsignal SIGTERM den Prozess nicht beendet.
Als wir auf dem Debian 12 Server beim erneut gestarteten xxsleep-a2 zusammen mit -v die Option -9 angaben, erschien eine Zeile mit der Signalnummer 9.
killall -9 -v xxsleep-a2Killed xxsleep-a2(2173) with signal 9Signalnamen und -nummern haben wir mit [kill -l] geprüft. Auch killall hat eine Option -l, die die bekannten Signalnamen ausgibt.
kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAXBei einer einzelnen Nummer erschien nur der Name dieses Signals. Die 15, die killall standardmäßig sendet, war TERM, und die 9, die mit -9 gesendet wird, war KILL.
kill -l 15TERMkill -l 9KILLGibst du einen Signalnamen an, der nicht in der Liste steht, erscheint eine Meldung der Form [FOO: unknown signal; killall -l lists signals.] (laut offiziellem Handbuch und Programmtext).
🔢 FAQ & empfohlene Inhalte
Echtzeit-Prüfung
Linux-Befehl top (CPU- und Speicherauslastung prüfen)
Befehl, der in Echtzeit zeigt, wie viel CPU und Speicher jeder Prozess belegt.
Jobsteuerung
Linux-Hintergrund (Back Ground) und Vordergrund (Fore Ground): Prozesse steuern
Jobsteuerung, mit der du einen Befehl in den Hintergrund schickst und wieder nach vorne holst.
Geöffnete Dateien
[Linux] lsof-Befehl: Informationen zu geöffneten Dateien ausgeben
Befehl, der die Dateien und Sockets, die ein Prozess geöffnet hat, zusammen mit der PID zeigt.
ℹ️ Affiliate-Hinweis
Die Inhalte dieser Website enthalten Affiliate-Links. Kauft ein Besucher über einen dieser Links ein Produkt oder eine Dienstleistung, erhält die Website vom Verkäufer eine Provision. Der Betrag, den der Käufer zahlt(bei Aktionsrabatten sinkt er ↓), steigt dadurch nicht. Angegebene Preise, Rabatte und Lagerbestände entsprechen dem Stand bei Erstellung und können abweichen; prüfe sie daher vor dem Kauf beim Verkäufer. Produkte werden nach eigenen Kriterien ausgewählt und bewertet, und Provisionen beeinflussen weder die Reihenfolge noch den Inhalt der Bewertungen.