killall-commando: processen op naam beëindigen, het signaal -9 en psmisc installeren
Het killall-commando is een Linux-commando dat draaiende processen niet op procesnummer (PID) maar op programmanaam kiest en ze een signaal stuurt; geef je geen signaal op, dan stuurt het SIGTERM (volgens de officiële handleiding). Omdat het alle processen met dezelfde naam in één keer beëindigt, hebben we op een AlmaLinux 9 server eerst met pgrep en ps vier processen gecontroleerd die waren gestart vanuit kopieën van sleep onder andere namen; bij een uitvoerbaar bestand met een naam van meer dan 15 tekens bleven alleen de eerste 15 tekens over in de procesnaam.
We hebben killall alleen uitgevoerd op xxsleep-processen die voor de test onder een normaal account op een Debian 12 server waren gestart. De resultaatvakken tonen de uitvoer van rpm, pgrep, ps, pidof, cat en kill, uitgevoerd met het root-account op een AlmaLinux 9.8 server, en de uitvoer van killall op de Debian 12 server. Procesnummers (PID), procesnamen, paden van uitvoerbare bestanden en accountnamen zijn vervangen door voorbeeldwaarden.
1️⃣ Het killall-commando installeren
killall hoort bij het pakket psmisc. Toen we op een AlmaLinux 9.8 server met rpm controleerden bij welk pakket /usr/bin/killall hoort, verscheen versie psmisc 23.4.
rpm -qf --qf '%{NAME} %{VERSION}\n' /usr/bin/killallpsmisc 23.4De bestandslijst van hetzelfde pakket, bekeken met rpm -ql, bevatte ook pstree en fuser.
Krijg je [command not found], dus dat het commando niet gevonden wordt, installeer dan het pakket psmisc. In de RHEL-familie is dat [dnf install psmisc], in de Debian-familie [apt install psmisc]. Op de Debian 12 server was psmisc 23.6 al geïnstalleerd, en killall stond in /usr/bin/killall.
Bij controle op de AlmaLinux 9.8 server zat het vergelijkbaar genoemde pkill in het pakket procps-ng, en was kill een ingebouwd shellcommando.
2️⃣ Het killall-commando gebruiken
De basisvorm is [killall procesnaam]. Het zoekt alle draaiende processen met de opgegeven naam en stuurt ze een signaal; geef je meerdere namen op, dan doet het hetzelfde voor elke naam (volgens de officiële handleiding).
Omdat processen met dezelfde naam allemaal tegelijk stoppen, controleer je eerst met pgrep wat er onder die naam draait. We kopieerden sleep in een werkmap onder de namen xxsleep-a1, xxsleep-a2 en xxsleep-longname-x1, startten xxsleep-a1 twee keer, dus vier processen in totaal, en toonden nummers en namen met -l.
pgrep -l xxsleep2141 xxsleep-a1
2142 xxsleep-a1
2150 xxsleep-a2
2155 xxsleep-longnamOp de vierde regel heet het uitvoerbare bestand xxsleep-longname-x1, maar de procesnaam was afgekapt bij xxsleep-longnam.
Met -a verschijnt de volledige opdrachtregel die is uitgevoerd. De twee xxsleep-a1 met dezelfde naam onderscheidden we aan het laatste argument in seconden, 300 en 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 330Om alleen processen te vinden waarvan de naam precies overeenkomt, voeg je -x toe. Het resultaat voor xxsleep-a1 was twee nummers.
pgrep -x xxsleep-a12141
2142Wil je alleen de nummers controleren door één naam letterlijk in te voeren, gebruik dan pidof. Zoeken naar xxsleep-a1 gaf beide nummers op één regel.
pidof xxsleep-a12142 2141ps toont alleen processen waarvan de naam precies overeenkomt als je na -C meerdere namen opgeeft, gescheiden door komma's.
ps -o pid,comm -C xxsleep-a1,xxsleep-a2 PID COMMAND
2141 xxsleep-a1
2142 xxsleep-a1
2150 xxsleep-a2Op de Debian 12 server startten we vier processen onder dezelfde namen en voerden we [killall xxsleep-a1] uit: er verscheen niets en het eindigde met afsluitcode 0. Bij opnieuw zoeken met pgrep waren beide xxsleep-a1 verdwenen en bleven alleen xxsleep-a2 en xxsleep-longname-x1 over. Geef je in plaats van een naam een pad met een schuine streep (/) op, dan kiest het de processen die dat bestand uitvoeren, ongeacht hun naam (volgens de officiële handleiding).
Met de niet-bestaande naam xxsleep-zz verscheen een regel met [no process found] na de naam, en het eindigde met afsluitcode 1. De afsluitcode is alleen 0 als voor elke opgegeven naam minstens één proces is beëindigd (volgens de officiële handleiding).
killall xxsleep-zzxxsleep-zz: no process foundWil je maar één proces beëindigen waarvan je het nummer kent, gebruik dan het Linux-commando kill om alleen naar dat nummer een signaal te sturen.
3️⃣ Opties van het killall-commando
Toen we de naam van het als xxsleep-longname-x1 gestarte proces uit /proc/PID/comm lazen, waren alleen de eerste 15 tekens over: xxsleep-longnam.
cat /proc/2155/commxxsleep-longnamWe voerden pgrep uit met xxsleep-longname van 16 tekens.
pgrep -a xxsleep-longnameHet eindigde zonder uitvoer met afsluitcode 1, en bij opnieuw zoeken met xxsleep-longnam van 15 tekens verscheen dat proces.
pgrep -l xxsleep-longnam2155 xxsleep-longnamKrijgt killall een naam van meer dan 15 tekens en zijn er processen waarvan het de volledige naam niet kan lezen, dan neemt het alle processen waarvan de eerste 15 tekens overeenkomen; met -e slaat het zulke items over (volgens de officiële handleiding). Toen we op de Debian 12 server met -e en -v de eerste 15 tekens xxsleep-longnam opgaven, verschenen regels dat drie andere processen met een na 15 tekens afgekapte naam werden overgeslagen, en het eindigde met [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 foundMet de volledige naam xxsleep-longname-x1 volgde na dezelfde overslaregels een regel dat er een signaal naar dat proces was gestuurd.
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 15Met -v verscheen voor elk proces dat een signaal kreeg een regel met de naam, het nummer en het signaalnummer.
killall -v xxsleep-a2Killed xxsleep-a2(2150) with signal 15-i vraagt per proces of het moet worden beëindigd. We startten opnieuw twee xxsleep-a1 en gaven y en n na elkaar via de standaardinvoer: de twee vragen verschenen achter elkaar op één regel, alleen de eerste xxsleep-a1 stopte en de tweede bleef.
printf 'y\nn\n' | killall -i xxsleep-a1Kill xxsleep-a1(2171) ? (y/N) Kill xxsleep-a1(2172) ? (y/N)-u kiest alleen processen die eigendom zijn van dat account; laat je de naam weg, dan zijn alle processen van dat account het doel. Toen we na de accountnaam ook xxsleep-a1 opgaven, ging het signaal alleen naar de overgebleven xxsleep-a1.
killall -v -u user xxsleep-a1Killed xxsleep-a1(2172) with signal 15-o en -y kiezen op starttijd, en de tijd schrijf je als een getal met daarachter een eenheid s, m, h, d, w, M of y, zoals in [-o 30m].
-r leest namen als uitgebreide reguliere expressies. Met het patroon ^xxsleep-a in pgrep verschenen drie processen die met xxsleep-a beginnen.
pgrep -l '^xxsleep-a'2141 xxsleep-a1
2142 xxsleep-a1
2150 xxsleep-a2-w wacht en controleert elke seconde, tot alle processen die een signaal kregen verdwenen zijn. Negeert een proces het signaal of blijft het als zombie achter, dan kan killall eindeloos wachten.
De eerste tabel hieronder bevat de controlecommando's en killall-opties die in dit artikel echt zijn uitgevoerd; de niet uitgevoerde killall-opties staan in de tweede tabel, volgens de officiële handleiding.
📌 Processen controleren en killall: resultaten uit dit artikel
| Commando | Taak | Resultaat in dit artikel | |
|---|---|---|---|
| pgrep -l naam | Nummer en naam van processen waarvan de naam het bevat | Vier regels voor xxsleep; de lange naam is alleen zichtbaar tot de eerste 15 tekens, xxsleep-longnam | |
| pgrep -a naam | Nummer en volledige opdrachtregel | De twee xxsleep-a1 met dezelfde naam onderscheiden aan de laatste argumenten 300 en 310 | |
| pgrep -x naam | Alleen nummers van processen waarvan de naam precies overeenkomt | Voor xxsleep-a1 twee regels: 2141 en 2142 | |
| pidof naam | Nummers die onder die naam draaien, op één regel | Voor xxsleep-a1 2142 2141 | |
| ps -o pid,comm -C naam | Nummer en naam van processen waarvan de naam precies overeenkomt; meerdere namen gescheiden door komma's | Twee regels xxsleep-a1 en één regel xxsleep-a2 | |
| cat /proc/PID/comm | Procesnaam (tot de eerste 15 tekens) | 2155 is xxsleep-longnam | |
| killall naam | SIGTERM naar processen met die naam | Beide xxsleep-a1 gestopt met afsluitcode 0; de niet-bestaande naam xxsleep-zz gaf no process found en afsluitcode 1 | |
| killall -e naam | Namen van meer dan 15 tekens alleen als de volledige naam overeenkomt | xxsleep-longnam gaf no process found, xxsleep-longname-x1 gestopt | |
| killall -v naam | Toont het resultaat voor elk proces dat een signaal kreeg | Killed xxsleep-a2(2150) with signal 15 | |
| killall -i naam | Vraagt per proces om bevestiging vóór het beëindigen | Met y en n stopte alleen de eerste xxsleep-a1 | |
| killall -u accountnaam | Alleen processen die eigendom zijn van dat account | Samen met een naam opgegeven: alleen xxsleep-a1 van dat account gestopt | |
| killall -9 naam | SIGKILL in plaats van SIGTERM | Killed xxsleep-a2(2173) with signal 9 |
📎 Andere opties: volgens de officiële handleiding
| Optie | Taak | |
|---|---|---|
| -I, --ignore-case | Namen vergelijken zonder onderscheid tussen hoofdletters en kleine letters | |
| -g, --process-group | Signaal naar de procesgroep in plaats van het proces (één keer per groep) | |
| -l, --list | Lijst van bekende signaalnamen | |
| -n, --ns PID | Alleen processen in dezelfde PID-namespace als die PID; standaard alle namespaces | |
| -o, --older-than tijd | Alleen processen die vóór die tijd zijn gestart (eenheden s, m, h, d, w, M, y) | |
| -q, --quiet | Geen melding, ook als er geen proces is beëindigd | |
| -r, --regexp | Namen lezen als uitgebreide reguliere expressies | |
| -s, --signal signaal | Signaal dat in plaats van SIGTERM wordt gestuurd | |
| -V, --version | Versie-informatie tonen | |
| -w, --wait | Wachten tot alle processen die een signaal kregen verdwenen zijn | |
| -y, --younger-than tijd | Alleen processen die na die tijd zijn gestart | |
| -Z, --context patroon | Alleen processen waarvan de beveiligingscontext overeenkomt met het uitgebreide regex-patroon; vóór andere argumenten opgeven; de naam mag weg |
🔲 Simulator van het killall-commando
De simulator hieronder begint met een lijst van de vier xxsleep-processen plus de xxsleep-a2 van het voorbeeldaccount user1. Tik op de chips om te vergelijken welke regels uit de lijst verdwijnen met [killall -v], [-i] en [-u]; de uitvoerteksten van killall bootsen de uitvoer van de Debian 12 server na.
4️⃣ Signalen van killall
Het signaal dat je stuurt, geef je op met een naam, zoals [-HUP] of [-SIGHUP], met een nummer, zoals [-1], of na de optie -s (volgens de officiële handleiding). [killall -9 procesnaam] stuurt signaal 9, SIGKILL. SIGKILL is een signaal dat een proces niet kan opvangen of negeren (volgens de officiële handleiding), dus het proces stopt zonder op te ruimen. Daarom stuur je het als het standaardsignaal SIGTERM het proces niet beëindigt.
Toen we op de Debian 12 server bij de opnieuw gestarte xxsleep-a2 samen met -v ook -9 opgaven, verscheen een regel met signaalnummer 9.
killall -9 -v xxsleep-a2Killed xxsleep-a2(2173) with signal 9Signaalnamen en -nummers hebben we gecontroleerd met [kill -l]. Ook killall heeft een optie -l die de bekende signaalnamen toont.
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) SIGRTMAXMet één nummer verscheen alleen de naam van dat signaal. De 15 die killall standaard stuurt, was TERM, en de 9 die met -9 wordt gestuurd, was KILL.
kill -l 15TERMkill -l 9KILLGeef je een signaalnaam op die niet in de lijst staat, dan verschijnt een melding in de vorm [FOO: unknown signal; killall -l lists signals.] (volgens de officiële handleiding en de programmatekst).
🔢 FAQ & aanbevolen content
Realtime controleren
Linux top-commando (CPU- en geheugengebruik bekijken)
Commando dat in realtime toont hoeveel CPU en geheugen elk proces gebruikt.
Taakbeheer
Achtergrond (Back Ground) en voorgrond (Fore Ground) in Linux: processen beheren
Manier van taakbeheer om een commando naar de achtergrond te sturen en weer naar de voorgrond te halen.
Geopende bestanden
[Linux] lsof-commando: informatie over gebruikte bestanden tonen
Commando dat de bestanden en sockets die een proces open heeft, samen met de PID toont.
ℹ️ Affiliatemelding
De content van deze site bevat affiliatelinks. Koopt een bezoeker via een van deze links een product of dienst, dan ontvangt deze site een commissie van de verkoper. Het bedrag dat de koper betaalt (bij acties gaat het omlaag ↓) wordt daardoor niet hoger. De vermelde prijzen, kortingen en voorraad gelden op het moment van schrijven en kunnen afwijken; controleer ze daarom vóór je aankoop bij de verkoper. Producten worden gekozen en beoordeeld volgens onze eigen criteria, en commissies hebben geen invloed op de volgorde of de inhoud van de beoordelingen.