KILL(1)

NAZWA
kill - kończy proces

SKŁADNIA

kill [-sygnał|-s sygnał|-p] [-q wartość] [-a] [--timeout milisekundy sygnał] [--] pid|nazwa...

kill -l [liczba|0xmaska-sygnałów] | -L

kill -d pid

OPIS

Polecenie kill wysyła podany sygnał do określonych procesów lub grupy procesów.

Jeśli nie określi się sygnału, wysyłany jest sygnał TERM. Domyślną akcją tego sygnału jest przerwanie procesu. Sygnał ten powinien być preferowany wobec sygnału KILL (o numerze 9), ponieważ proces może zainstalować procedurę obsługi sygnału TERM, aby powziąć kroki w celu posprzątania, przed zakończeniem w uporządkowany sposób. Jeśli proces nie zakończy się po wysłaniu sygnału TERM, wtedy można użyć sygnału KILL; proszę mieć na uwadze, że ten ostatni sygnał nie może być przechwycony, zatem nie daje możliwości dokonania jakiegokolwiek sprzątania przed zakończeniem procesu.

Większość współczesnych powłok ma wbudowane polecenie kill, którego stosowanie jest zbliżone do opisywanego tu polecenia. Opcje --all, --pid i --queue oraz możliwość określenia procesów nazwą polecenia, są lokalnymi rozszerzeniami.

Jeśli sygnał wynosi 0, to nie jest wysyłany żaden sygnał, lecz sprawdzanie pod kątem wystąpienia błędów jest wciąż przeprowadzane.

ARGUMENTY

Lista procesów, które mają otrzymać sygnał, może zawierać przemieszane nazwy i identyfikatory procesów.

pid
    Każdy identyfikator procesu pid można podać w jeden z następujących sposobów:

    n
        gdzie n jest większe od 0. Sygnał otrzyma proces z PID równym n.

    0
        Sygnał otrzymają wszystkie procesy w bieżącej grupie procesów.

    -1
        Sygnał otrzymają wszystkie procesy z PID większym niż 1.

    -n
        gdzie n jest większe niż 1. Sygnał otrzymają wszystkie procesy w grupie procesów n. Gdy podaje się argument w postaci "-n" i ma on wskazywać grupę procesów, należy albo podać sygnał jako pierwszy, albo niniejszy argument musi być poprzedzony opcją "--", w innym przypadku zostanie bowiem potraktowany jako numer sygnału do wysłania.

nazwa
    Sygnał otrzymają wszystkie procesy wywołane za pomocą tej nazwy.

OPCJE

-s, --signal sygnał
    Sygnał do wysłania. Można go podać jako nazwę lub numer.

-l, --list [liczba|0xmaska-sygnałów]
    Wypisuje listę nazw sygnałów, przekształca podany numer sygnału na jego nazwę albo przekształca podaną maskę sygnałów na nazwy. Sygnały można znaleźć 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 sygnałów wraz z powiązanymi numerami.

-a, --all
    Nie ogranicza przekształceń typu: nazwa polecenia na PID, tylko do procesów, z tym samym identyfikatorem użytkownika jak bieżący proces.

-p, --pid
    Wypisuje tylko identyfikatory procesów (PID) podanych procesów, nie wysyła żadnych sygnałów.

-r, --require-handler
    Nie wysyła sygnału, jeśli nie jest on przechwytywany w przestrzeni użytkownika procesu otrzymującego sygnał.

--verbose
    Wypisuje PID(y), które otrzymałyby sygnał od kill, wraz z sygnałem.

-q, --queue wartość
    Wysyła sygnał za pomocą sigqueue(3), zamiast kill(2). Argument wartość jest liczbą całkowitą wysyłaną razem z sygnałem. Jeśli otrzymujący proces zainstalował procedurę obsługę tego sygnału za pomocą znacznika SA_SIGINFO sigaction(2), to może otrzymać te dane za pomocą pola si_sigval struktury siginfo_t.

--timeout milisekundy sygnał
    Wysyła sygnał zdefiniowany w zwykły sposób do procesu, po czym wysyła dodatkowy sygnał, po podanym czasie. Opcja --timeout powoduje, że kill odczeka zdefiniowany w milisekundach czas, przed wysłaniem kolejnego, podanego sygnału do procesu. Funkcję tę zaimplementowano za pomocą funkcjonalności PID-u deskryptora pliku jądra Linux aby zapewnić, że kolejny sygnał zostanie wysłany do tego samego procesu oraz że nie zostanie wysłany do procesu, który już nie istnieje.

    Proszę zauważyć, że system operacyjny może użyć ponownie danego PID-u, zatem zaimplementowanie równoważnej funkcji w powłoce, za pomocą kill i sleep mogłoby powodować wyścig, gdzie kolejny sygnał zostałby wysłany do innego procesu, który otrzymał odzyskany numer identyfikatora procesu.

    Opcję --timeout można podać wielokrotnie: sygnały są wysyłane kolejno po minięciu podanych czasów przeterminowania. Opcję --timeout można łączyć z opcją --queue.

    W poniższym przykładzie, polecenie wyśle kolejno sygnały QUIT, TERM i KILL, odczekując po 1000 milisekund pomiędzy nimi:

        kill --verbose --timeout 1000 TERM --timeout 1000 KILL \
                --signal QUIT 12345

-d, --show-process-state pid
    Odkodowuje pola związane z sygnałem w /proc/pid/status.

        $ kill -d $$
        Zablokowany: INT
        Zignorowany: TERM TSTP TTIN TTOU
        Złapany: HUP INT PIPE ALRM CHLD WINCH

STATUS ZAKOŃCZENIA

kill ma następujące wartości statusu zakończenia:

0
    sukces

1
    niepowodzenie

64
    częściowy sukces (gdy poda się więcej niż jeden proces)

UWAGI

Choć można podać TID (identyfikator wątku - thread ID; zob. gettid(2)) jednego z wątków procesu wielowątkowego jako argument kill, sygnał jest i tak skierowany wobec procesu (tj. całej grupy wątków). Innymi słowy, nie da się wysłać sygnału jedynie do ściśle określonego wątku procesu wielowątkowego. Sygnał zostanie dostarczony do wybranego w sposób dowolny wątku procesu docelowego, który nie blokuje sygnału. Więcej szczegółów opisano w podręczniku signal(7) oraz w opisie CLONE_THREAD w podręczniku clone(2).

Poszczególne powłoki udostępniają wbudowane polecenie kill, które ma pierwszeństwo wobec pliku wykonywalnego kill(1) opisywanego w niniejszym podręczniku. Najłatwiejszym sposobem zapewnienia, że wykona się polecenie tu opisane, jest użycie pełnej ścieżki przy wywołaniu polecenia np. /bin/kill --version

AUTORZY

Pierwotną wersję zapożyczono z BSD 4.4.

ZOBACZ TAKŻE

bash(1), tcsh(1), sigaction(2), kill(2), sigqueue(3), signal(7) proc(5) proc_pid_status(5)

ZGŁASZANIE BŁĘDÓW

Problemy należy zgłaszać w

DOSTĘPNOŚĆ

Polecenie kill jest częścią pakietu util-linux, który można pobrać ze strony