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

NAZWA

       exit - powoduje normalne zakończenie programu

BIBLIOTEKA

       Standardowa biblioteka C (libc, -lc)

SKŁADNIA

       #include <stdlib.h>

       [[noreturn]] void exit(int status);

OPIS

       Funkcja exit() powoduje normalne zakończenie procesu i zwrócenie najmniej znaczącego bajtu
       statusu status & 0xFF) procesowi macierzystemu (zob. wait(2)).

       Wszystkie funkcje zarejestrowane przez  atexit(3) i on_exit(3) są wywoływane w  kolejności
       odwrotnej  do  kolejności  ich rejestracji. (Możliwe jest, aby którakolwiek z tych funkcji
       użyła  atexit(3) lub on_exit(3), aby zarejestrować dodatkowe  funkcje  wykonywane  podczas
       kończenia   działania  procesu;  nowe  funkcje  są  dodawane  na  początek  listy  funkcji
       przeznaczonych do wywołania). Jeśli jedna z tych  funkcji  nie  powróci  (to  jest  wywoła
       _exit(2)  lub  się  zabije  za  pomocą sygnału), to żadna z pozostałych funkcji nie będzie
       wywołana i dalsze przetwarzanie (w  szczególności  opróżnianie  strumieni  stdio(3))  jest
       przerywane.  Jeśli  ta  sama  funkcja  zostanie   zarejestrowana  za  pomocą atexit(3) lub
       on_exit(3) więcej niż raz, to będzie wywołana tyle razy, ile razy była zarejestrowana.

       Wszystkie otwarte strumienie stdio(3) są opróżniane  i  zamykane.  Pliki  utworzone  przez
       tmpfile(3) są usuwane.

       Standard  C  wymienia  dwie  definicje  EXIT_SUCCESS  i  EXIT_FAILURE,  które  mogą zostać
       przekazane do exit(), aby wskazać, odpowiednio, czy zakończenie  było  pomyślne,  czy  też
       nie.

WARTOŚĆ ZWRACANA

       Funkcja exit() nie powraca.

ATRYBUTY

       Informacje   o   pojęciach   używanych   w  tym  rozdziale  można  znaleźć  w  podręczniku
       attributes(7).

       ┌───────────────────────────────────┬────────────────────────┬────────────────────────────┐
       │InterfejsAtrybutWartość                    │
       ├───────────────────────────────────┼────────────────────────┼────────────────────────────┤
       │exit()                             │ Bezpieczeństwo wątkowe │ MT-niebezpieczne race:exit │
       └───────────────────────────────────┴────────────────────────┴────────────────────────────┘
       Funkcja exit() używa niezabezpieczonej zmiennej globalnej,  w  związku  z  czym  nie  jest
       wątkowo bezpieczna.

STANDARDY

       C11, POSIX.1-2008.

HISTORIA

       C89, POSIX.1-2001, SVr4, 4.3BSD.

UWAGI

       Nie  jest  zdefiniowane zachowanie, gdy jedna z funkcji zarejestrowanych przez atexit(3) i
       on_exit(3) wywoła exit() lub longjmp(3). Proszę zauważyć,  że  wywołanie  execve(2)  usuwa
       rejestracje utworzone przez atexit(3) i on_exit(3).

       Używanie EXIT_SUCCESS i EXIT_FAILURE zamiast 0 i pewnej wartości niezerowej, jak 1 lub -1,
       zapewnia nieco lepszą przenośność (do środowisk nieuniksowych). W szczególności VMS  używa
       innej konwencji.

       BSD  próbował  zestandaryzować kody zakończenia (co przyjęły niektóre biblioteki C, w  tym
       także biblioteka GNU C); patrz plik <sysexits.h>.

       Po  wykonaniu  exit(),  status  zakończenia  musi   być   przetransmitowany   do   procesu
       macierzystego. Występują trzy przypadki:

       •  Jeśli  proces  macierzysty ma ustawione SA_NOCLDWAIT lub ma ustawioną procedurę obsługi
          SIGCHLD na SIG_IGN, to status jest odrzucany, a potomek natychmiast ginie.

       •  Jeśli  proces  macierzysty  oczekiwał  na  potomka,  jest  on  informowany  o  statusie
          zakończenia, a potomek natychmiast ginie.

       •  W  innych  sytuacjach,  potomek  staje się procesem „zombie”: większość zasobów procesu
          jest odzyskiwana,  jednak  wpis  zawierający  minimalną  dawkę  informacji  o  procesie
          potomnym  (status  zakończenia,  statystyki  użycia zasobów) jest zachowywany w tablicy
          procesów. Pozwala to procesowi  macierzystemu  na  późniejsze  użycie  waitpid(2)  (lub
          podobnego),  aby  poznać status zakończenia potomka; w tym momencie wpis procesu zombie
          jest zwalniany.

       Jeśli  implementacja  obsługuje  sygnał  SIGCHLD,  to  zostanie  on  wysłany  do   procesu
       macierzystego.  Jeśli  proces  macierzysty ustawił SA_NOCLDWAIT, to nie jest zdefiniowane,
       czy sygnał SIGCHLD zostanie wysłany.

   Sygnały wysyłane do innych procesów
       Jeśli proces wychodzący jest inicjatorem sesji a sterujący nim  terminal  jest  terminalem
       sterującym   dla   sesji,   to   do  każdego  z  procesów  należących  do  grupy  procesów
       pierwszoplanowych tego terminala sterującego, zostanie wysłany sygnał SIGHUP,  a  terminal
       zostanie odłączony od sesji umożliwiając jego przejęcie przez nowy proces sterujący.

       Jeśli  zakończenie  procesu powoduje osierocenie grupy procesów, a którykolwiek z członków
       nowo osieroconej grupy procesów jest  zatrzymany,  to  po  sygnale  SIGHUP  do  każdego  z
       procesów  tej  grupy  procesów  zostanie  wysłany  sygnał  SIGCONT. Opis osieroconych grup
       procesów można znaleźć w podręczniku setpgid(2).

       Za wyjątkiem przypadków opisanych powyżej, gdy sygnalizowane procesy  mogą  być  potomkami
       procesu  kończonego,  zakończenie procesu zwykle nie powoduje wysłania sygnału do potomków
       tego procesu. Jednakże proces może skorzystać z operacji  PR_SET_PDEATHSIG  prctl(2),  aby
       spowodować otrzymanie sygnału, gdy jego rodzic zakończy się.

ZOBACZ TAKŻE

       _exit(2), get_robust_list(2), setpgid(2), wait(2), atexit(3), on_exit(3), tmpfile(3)

TŁUMACZENIE

       Autorami   polskiego   tłumaczenia   niniejszej   strony   podręcznika   są:  Adam  Byrtek
       <alpha@irc.pl>,  Andrzej   Krzysztofowicz   <ankry@green.mf.pg.gda.pl>,   Robert   Luberda
       <robert@debian.org> 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⟩.