KILL(1) Polecenia uzytkownika KILL(1) NAZWA kill - konczy proces SKLADNIA kill [-sygnal|-s sygnal|-p] [-q wartosc] [-a] [--timeout milisekundy sygnal] [--] pid|nazwa... kill -l [liczba|0xmaska-sygnalow] | -L kill -d pid OPIS Polecenie kill wysyla podany sygnal do okreslonych procesow lub grupy procesow. Jesli nie okresli sie sygnalu, wysylany jest sygnal TERM. Domyslna akcja tego sygnalu jest przerwanie procesu. Sygnal ten powinien byc preferowany wobec sygnalu KILL (o numerze 9), poniewaz proces moze zainstalowac procedure obslugi sygnalu TERM, aby powziac kroki w celu posprzatania, przed zakonczeniem w uporzadkowany sposob. Jesli proces nie zakonczy sie po wyslaniu sygnalu TERM, wtedy mozna uzyc sygnalu KILL; prosze miec na uwadze, ze ten ostatni sygnal nie moze byc przechwycony, zatem nie daje mozliwosci dokonania jakiegokolwiek sprzatania przed zakonczeniem procesu. Wiekszosc wspolczesnych powlok ma wbudowane polecenie kill, ktorego stosowanie jest zblizone do opisywanego tu polecenia. Opcje --all, --pid i --queue oraz mozliwosc okreslenia procesow nazwa polecenia, sa lokalnymi rozszerzeniami. Jesli sygnal wynosi 0, to nie jest wysylany zaden sygnal, lecz sprawdzanie pod katem wystapienia bledow jest wciaz przeprowadzane. ARGUMENTY Lista procesow, ktore maja otrzymac sygnal, moze zawierac przemieszane nazwy i identyfikatory procesow. pid Kazdy identyfikator procesu pid mozna podac w jeden z nastepujacych sposobow: n gdzie n jest wieksze od 0. Sygnal otrzyma proces z PID rownym n. 0 Sygnal otrzymaja wszystkie procesy w biezacej grupie procesow. -1 Sygnal otrzymaja wszystkie procesy z PID wiekszym niz 1. -n gdzie n jest wieksze niz 1. Sygnal otrzymaja wszystkie procesy w grupie procesow n. Gdy podaje sie argument w postaci "-n" i ma on wskazywac grupe procesow, nalezy albo podac sygnal jako pierwszy, albo niniejszy argument musi byc poprzedzony opcja "--", w innym przypadku zostanie bowiem potraktowany jako numer sygnalu do wyslania. nazwa Sygnal otrzymaja wszystkie procesy wywolane za pomoca tej nazwy. OPCJE -s, --signal sygnal Sygnal do wyslania. Mozna go podac jako nazwe lub numer. -l, --list [liczba|0xmaska-sygnalow] Wypisuje liste nazw sygnalow, przeksztalca podany numer sygnalu na jego nazwe albo przeksztalca podana maske sygnalow na nazwy. Sygnaly mozna znalezc w pliku /usr/include/linux/signal.h. $ ps s $$ UID PID PENDING BLOCKED IGNORED CAUGHT STAT TTY TIME COMMAND 1000 1608069 0000000000000000 0000000000000002 0000000000384000 0000000008013003 Ss pts/44 0:02 zsh $ kill -l 0x0000000000384000 TERM TSTP TTIN TTOU -L, --table Podobnie do -l, lecz wypisze nazwy sygnalow wraz z powiazanymi numerami. -a, --all Nie ogranicza przeksztalcen typu: nazwa polecenia na PID, tylko do procesow, z tym samym identyfikatorem uzytkownika jak biezacy proces. -p, --pid Wypisuje tylko identyfikatory procesow (PID) podanych procesow, nie wysyla zadnych sygnalow. -r, --require-handler Nie wysyla sygnalu, jesli nie jest on przechwytywany w przestrzeni uzytkownika procesu otrzymujacego sygnal. --verbose Wypisuje PID(y), ktore otrzymalyby sygnal od kill, wraz z sygnalem. -q, --queue wartosc Wysyla sygnal za pomoca sigqueue(3), zamiast kill(2). Argument wartosc jest liczba calkowita wysylana razem z sygnalem. Jesli otrzymujacy proces zainstalowal procedure obsluge tego sygnalu za pomoca znacznika SA_SIGINFO sigaction(2), to moze otrzymac te dane za pomoca pola si_sigval struktury siginfo_t. --timeout milisekundy sygnal Wysyla sygnal zdefiniowany w zwykly sposob do procesu, po czym wysyla dodatkowy sygnal, po podanym czasie. Opcja --timeout powoduje, ze kill odczeka zdefiniowany w milisekundach czas, przed wyslaniem kolejnego, podanego sygnalu do procesu. Funkcje te zaimplementowano za pomoca funkcjonalnosci PID-u deskryptora pliku jadra Linux aby zapewnic, ze kolejny sygnal zostanie wyslany do tego samego procesu oraz ze nie zostanie wyslany do procesu, ktory juz nie istnieje. Prosze zauwazyc, ze system operacyjny moze uzyc ponownie danego PID-u, zatem zaimplementowanie rownowaznej funkcji w powloce, za pomoca kill i sleep mogloby powodowac wyscig, gdzie kolejny sygnal zostalby wyslany do innego procesu, ktory otrzymal odzyskany numer identyfikatora procesu. Opcje --timeout mozna podac wielokrotnie: sygnaly sa wysylane kolejno po minieciu podanych czasow przeterminowania. Opcje --timeout mozna laczyc z opcja --queue. W ponizszym przykladzie, polecenie wysle kolejno sygnaly QUIT, TERM i KILL, odczekujac po 1000 milisekund pomiedzy nimi: kill --verbose --timeout 1000 TERM --timeout 1000 KILL \ --signal QUIT 12345 -d, --show-process-state pid Odkodowuje pola zwiazane z sygnalem w /proc/pid/status. $ kill -d $$ Zablokowany: INT Zignorowany: TERM TSTP TTIN TTOU Zlapany: HUP INT PIPE ALRM CHLD WINCH STATUS ZAKONCZENIA kill ma nastepujace wartosci statusu zakonczenia: 0 sukces 1 niepowodzenie 64 czesciowy sukces (gdy poda sie wiecej niz jeden proces) UWAGI Choc mozna podac TID (identyfikator watku - thread ID; zob. gettid(2)) jednego z watkow procesu wielowatkowego jako argument kill, sygnal jest i tak skierowany wobec procesu (tj. calej grupy watkow). Innymi slowy, nie da sie wyslac sygnalu jedynie do scisle okreslonego watku procesu wielowatkowego. Sygnal zostanie dostarczony do wybranego w sposob dowolny watku procesu docelowego, ktory nie blokuje sygnalu. Wiecej szczegolow opisano w podreczniku signal(7) oraz w opisie CLONE_THREAD w podreczniku clone(2). Poszczegolne powloki udostepniaja wbudowane polecenie kill, ktore ma pierwszenstwo wobec pliku wykonywalnego kill(1) opisywanego w niniejszym podreczniku. Najlatwiejszym sposobem zapewnienia, ze wykona sie polecenie tu opisane, jest uzycie pelnej sciezki przy wywolaniu polecenia np. /bin/kill --version AUTORZY Salvatore Valente , Karel Zak Pierwotna wersje zapozyczono z BSD 4.4. ZOBACZ TAKZE bash(1), tcsh(1), sigaction(2), kill(2), sigqueue(3), signal(7) proc(5) proc_pid_status(5) ZGLASZANIE BLEDOW Problemy nalezy zglaszac w systemie sledzenia bledow . DOSTEPNOSC Polecenie kill jest czescia pakietu util-linux, ktory mozna pobrac ze strony Archiwum jadra Linux . util-linux 2.41 2025-03-29 KILL(1)