Polecenie killall: kończenie procesów po nazwie, sygnał -9 i instalacja psmisc

Środowisko testoweRodzina RHELAlmaLinux 9.8psmisc 23.4konto rootDebian 12 · psmisc 23.6 Zwykłe konto (uruchamia killall)
Polecenia procesów · harmonogramukillallLokalizacja/usr/bin/killallSprawdzono 2026-11-03

Polecenie killall to polecenie Linuksa, które wybiera działające procesy po nazwie programu zamiast po numerze procesu (PID) i wysyła do nich sygnał; jeśli nie podasz sygnału, wysyła SIGTERM (według oficjalnego podręcznika). Ponieważ kończy naraz wszystkie procesy o tej samej nazwie, na serwerze AlmaLinux 9 najpierw sprawdziliśmy poleceniami pgrep i ps cztery procesy uruchomione z kopii sleep pod innymi nazwami; w przypadku pliku wykonywalnego o nazwie dłuższej niż 15 znaków w nazwie procesu zostało tylko pierwsze 15 znaków.

killall uruchomiliśmy tylko na procesach xxsleep uruchomionych do testów na zwykłym koncie na serwerze Debian 12. Ramki z wynikami pokazują wyjście rpm, pgrep, ps, pidof, cat i kill uruchomionych na koncie root na serwerze AlmaLinux 9.8 oraz wyjście killall uruchomionego na serwerze Debian 12. Numery procesów (PID), nazwy procesów, ścieżki plików wykonywalnych i nazwy kont zastąpiono przykładowymi wartościami.

1️⃣ Instalacja polecenia killall

  • ↪️ Pakiet psmisc i sprawdzenie wersji

killall należy do pakietu psmisc. Gdy na serwerze AlmaLinux 9.8 sprawdziliśmy za pomocą rpm, do którego pakietu należy /usr/bin/killall, pojawiła się wersja psmisc 23.4.

rpm -qf --qf '%{NAME} %{VERSION}\n' /usr/bin/killall
psmisc 23.4

Lista plików tego samego pakietu, wyświetlona przez rpm -ql, zawierała też pstree i fuser.

Jeśli pojawi się [command not found], czyli że polecenia nie znaleziono, zainstaluj pakiet psmisc. W rodzinie RHEL to [dnf install psmisc], a w rodzinie Debian [apt install psmisc]. Na serwerze Debian 12 psmisc 23.6 był już zainstalowany, a killall znajdował się w /usr/bin/killall.

Sprawdzenie na serwerze AlmaLinux 9.8 pokazało, że pkill o podobnej nazwie należy do pakietu procps-ng, a kill jest poleceniem wbudowanym powłoki.

2️⃣ Jak używać polecenia killall

  • ↪️ Sprawdzanie celów po nazwie procesu

Podstawowa forma to [killall nazwa procesu]. Znajduje wszystkie działające procesy o podanej nazwie i wysyła do nich sygnał; jeśli podasz kilka nazw, robi to samo dla każdej z nich (według oficjalnego podręcznika).

Ponieważ procesy o tej samej nazwie kończą się wszystkie naraz, najpierw sprawdź poleceniem pgrep, co działa pod tą nazwą. Skopiowaliśmy sleep do folderu roboczego pod nazwami xxsleep-a1, xxsleep-a2 i xxsleep-longname-x1, uruchomiliśmy xxsleep-a1 dwa razy, łącznie cztery procesy, i wypisaliśmy numery oraz nazwy z -l.

pgrep -l xxsleep
2141 xxsleep-a1
2142 xxsleep-a1
2150 xxsleep-a2
2155 xxsleep-longnam

W czwartym wierszu plik wykonywalny nazywa się xxsleep-longname-x1, ale nazwa procesu była ucięta na xxsleep-longnam.

Z -a pojawia się cały uruchomiony wiersz polecenia. Dwa procesy xxsleep-a1 o tej samej nazwie rozróżniliśmy po końcowym argumencie w sekundach, 300 i 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

Aby znaleźć tylko procesy, których nazwa pasuje dokładnie, dodaj -x. Wynik dla xxsleep-a1 to dwa numery.

pgrep -x xxsleep-a1
2141
2142

Aby sprawdzić tylko numery, wpisując jedną nazwę bez zmian, użyj pidof. Wyszukanie xxsleep-a1 pokazało oba numery w jednym wierszu.

pidof xxsleep-a1
2142 2141

ps wypisuje tylko procesy o dokładnie pasującej nazwie, jeśli po -C podasz kilka nazw rozdzielonych przecinkami.

ps -o pid,comm -C xxsleep-a1,xxsleep-a2
    PID COMMAND
   2141 xxsleep-a1
   2142 xxsleep-a1
   2150 xxsleep-a2

Na serwerze Debian 12 uruchomiliśmy cztery procesy pod tymi samymi nazwami i wykonaliśmy [killall xxsleep-a1]: nic nie wypisał i zakończył się kodem wyjścia 0. Przy ponownym wyszukaniu przez pgrep oba xxsleep-a1 zniknęły, a zostały tylko xxsleep-a2 i xxsleep-longname-x1. Jeśli zamiast nazwy podasz ścieżkę z ukośnikiem (/), wybiera procesy uruchamiające ten plik niezależnie od nazwy (według oficjalnego podręcznika).

Dla nieistniejącej nazwy xxsleep-zz pojawił się wiersz z [no process found] po nazwie, a polecenie zakończyło się kodem wyjścia 1. Kod wyjścia wynosi 0 tylko wtedy, gdy dla każdej podanej nazwy zakończono co najmniej jeden proces (według oficjalnego podręcznika).

killall xxsleep-zz
xxsleep-zz: no process found

Aby zakończyć tylko jeden proces o znanym numerze, wyślij sygnał tylko do tego numeru poleceniem kill: Polecenie kill w Linuksie.

3️⃣ Opcje polecenia killall

  • ↪️ -e i nazwy 15-znakowe, -i, -v, -u, -r

Po odczytaniu z /proc/PID/comm nazwy procesu uruchomionego jako xxsleep-longname-x1 zostało tylko pierwsze 15 znaków: xxsleep-longnam.

cat /proc/2155/comm
xxsleep-longnam

Uruchomiliśmy pgrep z 16-znakową nazwą xxsleep-longname.

pgrep -a xxsleep-longname

Zakończył się bez wyjścia z kodem wyjścia 1, a ponowne wyszukanie 15-znakową nazwą xxsleep-longnam pokazało ten proces.

pgrep -l xxsleep-longnam
2155 xxsleep-longnam

Gdy killall dostaje nazwę dłuższą niż 15 znaków, a są procesy, których pełnej nazwy nie może odczytać, celem stają się wszystkie procesy o pasujących pierwszych 15 znakach; z -e pomija takie pozycje (według oficjalnego podręcznika). Gdy na serwerze Debian 12 podaliśmy z -e i -v pierwsze 15 znaków xxsleep-longnam, pojawiły się wiersze o pominięciu trzech innych procesów z nazwą uciętą na 15 znakach, a polecenie zakończyło się na [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

Po podaniu pełnej nazwy xxsleep-longname-x1 po tych samych wierszach pominięcia pojawił się wiersz o wysłaniu sygnału do tego procesu.

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

Z -v dla każdego procesu, do którego wysłano sygnał, pojawił się wiersz z nazwą, numerem i numerem sygnału.

killall -v xxsleep-a2
Killed xxsleep-a2(2150) with signal 15

-i pyta przy każdym procesie, czy go zakończyć. Ponownie uruchomiliśmy dwa xxsleep-a1 i podaliśmy kolejno y i n przez standardowe wejście: oba pytania pojawiły się jedno po drugim w jednym wierszu, zakończył się tylko pierwszy xxsleep-a1, a drugi pozostał.

printf 'y\nn\n' | killall -i xxsleep-a1
Kill xxsleep-a1(2171) ? (y/N) Kill xxsleep-a1(2172) ? (y/N)

-u wybiera tylko procesy należące do tego konta, a jeśli pominiesz nazwę, celem są wszystkie procesy tego konta. Gdy po nazwie konta podaliśmy też xxsleep-a1, sygnał trafił tylko do pozostałego xxsleep-a1.

killall -v -u user xxsleep-a1
Killed xxsleep-a1(2172) with signal 15

-o i -y wybierają według czasu uruchomienia, a czas zapisuje się jako liczbę z jednostką s, m, h, d, w, M lub y, np. [-o 30m].

-r czyta nazwy jako rozszerzone wyrażenia regularne. Po podaniu wzorca ^xxsleep-a do pgrep pojawiły się trzy procesy zaczynające się od xxsleep-a.

pgrep -l '^xxsleep-a'
2141 xxsleep-a1
2142 xxsleep-a1
2150 xxsleep-a2

-w czeka, sprawdzając co sekundę, aż znikną wszystkie procesy, do których wysłano sygnał. Jeśli proces ignoruje sygnał albo zostaje jako zombie, czekanie może trwać bez końca.

Pierwsza tabela poniżej zawiera polecenia sprawdzające i opcje killall faktycznie uruchomione w tym artykule, a nieuruchomione opcje killall zebrano w drugiej tabeli według oficjalnego podręcznika.

📌 Sprawdzanie procesów i killall: wyniki z tego artykułu

PolecenieZadanieWynik w tym artykule
pgrep -l nazwaNumer i nazwa procesów, których nazwa ją zawieraCztery wiersze dla xxsleep; długa nazwa widoczna tylko do pierwszych 15 znaków, xxsleep-longnam
pgrep -a nazwaNumer i cały wiersz poleceniaDwa xxsleep-a1 o tej samej nazwie rozróżnione po końcowych argumentach 300 i 310
pgrep -x nazwaTylko numery procesów o dokładnie pasującej nazwieDla xxsleep-a1 dwa wiersze: 2141 i 2142
pidof nazwaNumery działające pod tą nazwą, w jednym wierszuDla xxsleep-a1 2142 2141
ps -o pid,comm -C nazwaNumer i nazwa procesów o dokładnie pasującej nazwie; kilka nazw rozdzielonych przecinkamiDwa wiersze xxsleep-a1 i jeden wiersz xxsleep-a2
cat /proc/PID/commNazwa procesu (do pierwszych 15 znaków)2155 to xxsleep-longnam
killall nazwaSIGTERM do procesów o tej nazwieOba xxsleep-a1 zakończone, kod wyjścia 0; nieistniejąca nazwa xxsleep-zz dała no process found i kod wyjścia 1
killall -e nazwaNazwy dłuższe niż 15 znaków tylko przy zgodności pełnej nazwyxxsleep-longnam dał no process found, xxsleep-longname-x1 zakończony
killall -v nazwaWypisuje wynik dla każdego procesu, do którego wysłano sygnałKilled xxsleep-a2(2150) with signal 15
killall -i nazwaPyta o potwierdzenie przy każdym procesie przed zakończeniemPo wpisaniu y i n zakończył się tylko pierwszy xxsleep-a1
killall -u nazwa kontaTylko procesy należące do tego kontaPodane razem z nazwą: zakończył się tylko xxsleep-a1 tego konta
killall -9 nazwaSIGKILL zamiast SIGTERMKilled xxsleep-a2(2173) with signal 9

📎 Pozostałe opcje: według oficjalnego podręcznika

OpcjaZadanie
-I, --ignore-casePorównuje nazwy bez rozróżniania wielkości liter
-g, --process-groupSygnał do grupy procesów zamiast do procesu (raz na grupę)
-l, --listLista znanych nazw sygnałów
-n, --ns PIDTylko procesy w tej samej przestrzeni nazw PID co ten PID; domyślnie wszystkie przestrzenie nazw
-o, --older-than czasTylko procesy uruchomione wcześniej niż ten czas (jednostki s, m, h, d, w, M, y)
-q, --quietNie zgłasza nic, nawet gdy żaden proces nie został zakończony
-r, --regexpCzyta nazwy jako rozszerzone wyrażenia regularne
-s, --signal sygnałSygnał wysyłany zamiast SIGTERM
-V, --versionWypisuje informacje o wersji
-w, --waitCzeka, aż znikną wszystkie procesy, do których wysłano sygnał
-y, --younger-than czasTylko procesy uruchomione później niż ten czas
-Z, --context wzorzecTylko procesy, których kontekst bezpieczeństwa pasuje do wzorca rozszerzonego wyrażenia regularnego; podaje się przed innymi argumentami; nazwę można pominąć

🔲 Symulator polecenia killall

Symulator poniżej zaczyna od listy czterech procesów xxsleep oraz xxsleep-a2 przykładowego konta user1. Dotknij chipów, aby porównać, które wiersze znikają z listy po [killall -v], [-i] i [-u]; teksty wyjścia killall naśladują wyjście uzyskane na serwerze Debian 12.

Symulator polecenia killallpsmisc 23.4
[root@server work]#
Działa tylko w przeglądarce. Lista po lewej zawiera przykładowe wartości, a killall to naśladowanie zgodne z tekstami wyjścia z serwera Debian 12, które usuwa wiersze tylko z listy.

4️⃣ Sygnały killall

  • ↪️ Opcja -s, killall -9 i numery sygnałów

Sygnał do wysłania podaje się nazwą, np. [-HUP] lub [-SIGHUP], numerem, np. [-1], albo po opcji -s (według oficjalnego podręcznika). [killall -9 nazwa procesu] wysyła sygnał 9, czyli SIGKILL. SIGKILL to sygnał, którego proces nie może przechwycić ani zignorować (według oficjalnego podręcznika), więc proces kończy się bez sprzątania. Dlatego wysyła się go, gdy domyślny sygnał SIGTERM nie kończy procesu.

Gdy na serwerze Debian 12 do ponownie uruchomionego xxsleep-a2 dodaliśmy -9 razem z -v, pojawił się wiersz z numerem sygnału 9.

killall -9 -v xxsleep-a2
Killed xxsleep-a2(2173) with signal 9

Nazwy i numery sygnałów sprawdziliśmy przez [kill -l]. killall też ma opcję -l, która wypisuje znane mu nazwy sygnałów.

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

Po wpisaniu jednego numeru pojawiła się tylko nazwa tego sygnału. Domyślnie wysyłany przez killall sygnał 15 to TERM, a 9 wysyłany z -9 to KILL.

kill -l 15
TERM
kill -l 9
KILL

Jeśli podasz nazwę sygnału spoza listy, pojawi się komunikat w formie [FOO: unknown signal; killall -l lists signals.] (według oficjalnego podręcznika i tekstów programu).

🔢 FAQ & polecane treści

killall to polecenie z pakietu psmisc, a pkill z pakietu procps-ng, tego samego co pgrep. pkill, tak jak pgrep, szuka części nazwy jako rozszerzonego wyrażenia regularnego, a killall czyta nazwy jako wyrażenia regularne tylko z -r (według oficjalnego podręcznika).

Oficjalny podręcznik psmisc podaje, że w systemach innych niż Linux [killall nazwa] może działać inaczej, niż się spodziewasz, i że trzeba szczególnie uważać przy uruchamianiu go na koncie administratora. W innych systemach najpierw sprawdź podręcznik danego systemu.

Liczba nazw, które można podać naraz, jest ograniczona: to rozmiar liczby całkowitej unsigned long pomnożony przez 8. W systemach 64-bitowych to zwykle 64, a w 32-bitowych 32 (według oficjalnego podręcznika).

ℹ️ Informacja o linkach partnerskich
Treści tej witryny zawierają linki partnerskie. Jeśli odwiedzający kupi produkt lub usługę przez taki link, witryna otrzymuje od sprzedawcy prowizję. Kwota płacona przy tym przez kupującego (podczas promocji spada↓) nie wzrasta. Podane ceny, rabaty i dostępność odnoszą się do chwili pisania i mogą różnić się od stanu faktycznego, dlatego przed zakupem sprawdź je u sprzedawcy. Produkty wybieramy i oceniamy według własnych kryteriów, a prowizja nie wpływa ani na kolejność prezentacji, ani na treść ocen.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *

Prove your humanity: 7   +   10   =