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
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  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⟩.