kill(2) System Calls Manual kill(2)

kill - wysyła sygnał do procesu

Standardowa biblioteka C (libc-lc)

#include <signal.h>
int kill(pid_t pid, int sig);
Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)):

kill():

    _POSIX_C_SOURCE

Funkcja systemowa kill() może służyć do przesłania dowolnego sygnału do dowolnego procesu lub do dowolnej grupy procesów.

Jeśli pid ma wartość dodatnią, to sygnał sig jest przesyłany do procesu o identyfikatorze pid.

Jeśli pid jest równy 0, to sig jest przesyłany do wszystkich procesów należących do tej samej grupy, co proces wywołujący.

Jeśli pid jest równy -1, to sygnał jest przesyłany do wszystkich procesów, do których proces wywołujący ma prawo wysyłać sygnały, oprócz procesu nr 1 (init), szczegóły poniżej.

Jeśli pid jest mniejszy niż -1, to sygnał jest przesyłany do wszystkich procesów należących do grupy procesów o identyfikatorze równym -pid.

Jeśli sig jest równy 0, to nie jest wysyłany żaden sygnał, ale wciąż przeprowadzane jest sprawdzenie istnienia i uprawnień; można to wykorzystać w celu sprawdzenia istnienia identyfikatora procesu lub identyfikatora grupy procesu, w przypadku których wywołujący ma prawo wysyłać sygnały.

For a process to have permission to send a signal, it must either be privileged (under Linux: have the CAP_KILL capability in the user namespace of the target process), or the real or effective user ID of the sending process must equal the real or saved set-user-ID of the target process. In the case of SIGCONT, it suffices when the sending and receiving processes belong to the same session. (Historically, the rules were different; see HISTORY.)

On success, zero is returned. If signals were sent to a process group, success means that at least one signal was delivered. On error, -1 is returned, and errno is set to indicate the error.

Podano nieprawidłowy sygnał.
Proces wywołujący nie ma uprawnień do wysyłania sygnału do żadnego z procesów docelowych.
Docelowy proces lub grupa procesów nie istnieje. Należy zauważyć, że istniejący proces może być zombie, czyli procesem, który już zakończył wykonanie, lecz jeszcze na niego nie zaczekano (wait(2)).

POSIX.1-2008.

POSIX.1-2001, SVr4, 4.3BSD.

W różnych wersjach jądra, Linux wymusza różne reguły dotyczące uprawnień wymaganych od procesu nieuprzywilejowanego, aby mógł on wysłać sygnał do innego procesu. W Linuksie 1.0 do 1.2.2 sygnał mógł być wysłany, gdy efektywny identyfikator użytkownika wysyłającego jest taki sam, jak odbierającego, lub gdy rzeczywisty identyfikator użytkownika wysyłającego jest taki sam, jak odbierającego. Od Linuksa 1.2.3 aż do 1.3.77, sygnał mógł być wysłany, gdy efektywny identyfikator użytkownika wysyłającego jest taki sam, jak efektywny lub rzeczywisty identyfikator użytkownika odbierającego. Obecne zasady, zgodnie z POSIX.1, zostały przyjęte w Linuksie 1.3.78.

Jedyne sygnały, jakie można wysłać do procesu o identyfikatorze 1 — procesu init — to te, dla których init jawnie zainstalował procedurę obsługi sygnału. Zabezpiecza to przed przypadkowym załamaniem systemu.

POSIX.1 wymaga, aby kill(-1,sig) wysyłało sig do wszystkich procesów, do których aktualny proces może go wysłać, za ewentualnym wyjątkiem pewnych, zdefiniowanych w implementacji, procesów systemowych. Linux pozwala procesowi wysłać sygnał do samego siebie, ale wywołanie kill(-1,sig) pod Linuksem nie powoduje wysłania sygnału do procesu wywołującego.

W przypadku gdy proces wysyła sygnał do siebie samego, a wysyłający wątek nie blokuje sygnału i żaden inny wątek go nie odblokował, ani nie czeka na niego w sigwait(3), POSIX.1 wymaga, aby co najmniej jeden odblokowany sygnał został dostarczony do wysyłającego wątku przed powrotem kill().

W Linuksie 2.6 do Linuksa 2.6.7 włącznie istniał błąd, który w przypadku wysyłania sygnałów do grupy procesu powodował, że kill() zawodziło z błędem EPERM, gdy wywołujący nie miał uprawnień do wysyłania sygnału do któregokolwiek (zamiast, poprawnie, wszystkich) członków grupy procesu. Pomimo zwracanego błędu, sygnał docierał jednak do wszystkich procesów, do których wywołujący miał prawo wysyłać sygnały.

kill(1), _exit(2), pidfd_send_signal(2), signal(2), tkill(2), exit(3), killpg(3), sigqueue(3), capabilities(7), credentials(7), signal(7)

Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Przemek Borys <pborys@dione.ids.pl>, Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl> i Michał Kułach <michal.kulach@gmail.com>

Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.

12 lutego 2025 r. Linux man-pages 6.12