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

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).
┌─────────────────────────────────────────────────┬────────────────────────┬────────────────────────────┐
│ Interfejs │ Atrybut │ Wartość │
├─────────────────────────────────────────────────┼────────────────────────┼────────────────────────────┤
│ 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
Tłumaczenie niniejszej strony podręcznika: 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 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. exit(3)