killall-Befehl: Prozesse per Name beenden, das Signal -9 und psmisc installieren

TestumgebungRHEL-FamilieAlmaLinux 9.8psmisc 23.4root-KontoDebian 12 · psmisc 23.6 Normales Konto (führt killall aus)
Befehle für Prozesse · ZeitplanungkillallSpeicherort/usr/bin/killallGeprüft am 2026-11-03

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

  • ↪️ Das Paket psmisc und die Version prüfen

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/killall
psmisc 23.4

In 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

  • ↪️ Ziele über den Prozessnamen prüfen

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 xxsleep
2141 xxsleep-a1
2142 xxsleep-a1
2150 xxsleep-a2
2155 xxsleep-longnam

In 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 xxsleep
2141 /root/work/xxsleep-a1 300
2142 /root/work/xxsleep-a1 310
2150 /root/work/xxsleep-a2 320
2155 /root/work/xxsleep-longname-x1 330

Um 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-a1
2141
2142

Wenn 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-a1
2142 2141

ps 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-a2

Auf 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-zz
xxsleep-zz: no process found

Willst 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

  • ↪️ -e und 15-Zeichen-Namen, -i, -v, -u, -r

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/comm
xxsleep-longnam

Wir haben pgrep mit dem 16 Zeichen langen xxsleep-longname ausgeführt.

pgrep -a xxsleep-longname

Es 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-longnam
2155 xxsleep-longnam

Bekommt 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-longnam
killall: 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 found

Mit 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-x1
killall: 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 15

Mit -v erschien für jeden Prozess, an den ein Signal ging, eine Zeile mit Name, Nummer und Signalnummer.

killall -v xxsleep-a2
Killed 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-a1
Kill 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-a1
Killed 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

BefehlWas es tutErgebnis in diesem Artikel
pgrep -l NameNummer und Name der Prozesse, deren Name ihn enthältVier Zeilen für xxsleep, der lange Name nur bis zu den ersten 15 Zeichen xxsleep-longnam sichtbar
pgrep -a NameNummer und gesamte BefehlszeileDie beiden gleichnamigen xxsleep-a1 am letzten Argument 300 und 310 unterschieden
pgrep -x NameNur Nummern der Prozesse mit genau übereinstimmendem NamenFür xxsleep-a1 zwei Zeilen: 2141 und 2142
pidof NameNummern, die unter diesem Namen laufen, in einer ZeileFür xxsleep-a1 2142 2141
ps -o pid,comm -C NameNummer und Name der Prozesse mit genau übereinstimmendem Namen, mehrere Namen durch Kommas getrenntZwei Zeilen xxsleep-a1 und eine Zeile xxsleep-a2
cat /proc/PID/commProzessname (bis zu den ersten 15 Zeichen)2155 ist xxsleep-longnam
killall NameSIGTERM an Prozesse mit diesem NamenBeide xxsleep-a1 beendet, Exit-Code 0; der nicht vorhandene Name xxsleep-zz gab no process found und Exit-Code 1
killall -e NameNamen mit mehr als 15 Zeichen nur, wenn der vollständige Name passtxxsleep-longnam gab no process found, xxsleep-longname-x1 beendet
killall -v NameGibt für jeden Prozess, an den ein Signal ging, das Ergebnis ausKilled xxsleep-a2(2150) with signal 15
killall -i NameFragt vor dem Beenden bei jedem Prozess nachMit y und n wurde nur das erste xxsleep-a1 beendet
killall -u KontonameNur Prozesse, die diesem Konto gehörenZusammen mit einem Namen angegeben, nur xxsleep-a1 dieses Kontos beendet
killall -9 NameSIGKILL statt SIGTERMKilled xxsleep-a2(2173) with signal 9

📎 Weitere Optionen: laut offiziellem Handbuch

OptionWas es tut
-I, --ignore-caseNamen ohne Unterscheidung von Groß- und Kleinschreibung vergleichen
-g, --process-groupSignal an die Prozessgruppe statt an den Prozess (einmal pro Gruppe)
-l, --listListe der bekannten Signalnamen
-n, --ns PIDNur Prozesse im selben PID-Namensraum wie diese PID, standardmäßig alle Namensräume
-o, --older-than ZeitNur Prozesse, die vor dieser Zeit gestartet wurden (Einheiten s, m, h, d, w, M, y)
-q, --quietKeine Meldung, auch wenn kein Prozess beendet wurde
-r, --regexpNamen als erweiterte reguläre Ausdrücke lesen
-s, --signal SignalSignal, das statt SIGTERM gesendet wird
-V, --versionVersionsinformationen ausgeben
-w, --waitWarten, bis alle Prozesse, an die ein Signal ging, verschwunden sind
-y, --younger-than ZeitNur Prozesse, die nach dieser Zeit gestartet wurden
-Z, --context MusterNur 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.

Simulator für den killall-Befehlpsmisc 23.4
[root@server work]#
Läuft nur in deinem Browser. Die Liste links enthält Beispielwerte, und killall ist eine Nachahmung, die den Ausgabetexten vom Debian 12 Server folgt und Zeilen nur aus der Liste entfernt.

4️⃣ killall-Signale

  • ↪️ Die Option -s, killall -9 und Signalnummern

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-a2
Killed xxsleep-a2(2173) with signal 9

Signalnamen 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) SIGRTMAX

Bei 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 15
TERM
kill -l 9
KILL

Gibst 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

killall ist ein Befehl aus dem Paket psmisc, pkill aus dem Paket procps-ng, genau wie pgrep. pkill sucht wie pgrep einen Teil des Namens als erweiterten regulären Ausdruck, killall liest Namen nur mit -r als reguläre Ausdrücke (laut offiziellem Handbuch).

Das offizielle psmisc-Handbuch schreibt, dass [killall Name] auf Nicht-Linux-Systemen anders als erwartet funktionieren kann und man beim Ausführen mit dem Administratorkonto besonders vorsichtig sein soll. Auf anderen Systemen prüfst du zuerst das Handbuch des jeweiligen Systems.

Die Anzahl der Namen, die du auf einmal angeben kannst, ist begrenzt: die Größe eines unsigned long Integers mal 8. Auf 64-Bit-Systemen sind das meist 64, auf 32-Bit-Systemen 32 (laut offiziellem Handbuch).

ℹ️ 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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Beweisen Sie, dass Sie ein Mensch sind: 1   +   4   =