Provided by: manpages-pl-dev_4.23.1-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
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⟩.