oracular (3) exit.3.gz

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⟩.