Provided by: manpages-pl-dev_4.26.0-1_all 

NAZWA
kill - wysyła sygnał do procesu
BIBLIOTEKA
Standardowa biblioteka C (libc, -lc)
SKŁADNIA
#include <signal.h>
int kill(pid_t pid, int sig);
Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)):
kill():
_POSIX_C_SOURCE
OPIS
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.
Aby proces miał prawo wysłać sygnał, musi być albo uprzywilejowany (w Linuksie: posiadać przywilej
CAP_KILL (ang. capability) w przestrzeni nazw użytkownika procesu docelowego), albo rzeczywisty lub
efektywny identyfikator użytkownika procesu wysyłającego musi być równy rzeczywistemu ID lub zachowanemu
set UID procesu docelowego. W przypadku sygnału SIGCONT wystarcza, aby procesy wysyłający i otrzymujący
należały do tej samej sesji (historycznie zasady te były inne; zob. UWAGI).
WARTOŚĆ ZWRACANA
Po pomyślnym zakończeniu (gdy wysłano co najmniej jeden sygnał) zwracane jest zero. w przypadku błędu
zwracane jest -1 i ustawiane errno wskazując błąd.
BŁĘDY
EINVAL Podano nieprawidłowy sygnał.
EPERM Proces wywołujący nie ma uprawnień do wysyłania sygnału do żadnego z procesów docelowych.
ESRCH 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)).
STANDARDY
POSIX.1-2008.
HISTORIA
POSIX.1-2001, SVr4, 4.3BSD.
Uwagi linuksowe
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.
UWAGI
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().
USTERKI
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.
ZOBACZ TAKŻE
kill(1), _exit(2), pidfd_send_signal(2), signal(2), tkill(2), exit(3), killpg(3), sigqueue(3),
capabilities(7), credentials(7), signal(7)
TŁUMACZENIE
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.
Linux man-pages 6.9.1 2 maja 2024 r. kill(2)