Provided by: manpages-pl-dev_4.23.1-1_all bug

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.8                              2 maja 2024 r.                                          kill(2)