exit(3) powoduje normalne zakończenie programu

SKŁADNIA

#include <stdlib.h>


void exit(int status);

OPIS

Funkcja exit() powoduje normalne zakończenie procesu i zwrócenie procesowi-rodzicowi wartości status & 0377 (patrz 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

Wielowątkowość (patrz pthreads(7))

Funkcja exit() używa niezabezpieczonej zmiennej globalnej, w związku z czym nie jest wątkowo bezpieczna.

ZGODNE Z

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

UWAGI

Nie jest zdefiniowane, co się stanie, jeśli 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; patrz plik <sysexits.h>.

Po wywołaniu exit() kod zakończenia musi zostać przekazany do procesu macierzystego. Możliwe są trzy przypadki. Jeśli proces macierzysty ma ustawione SA_NOCLDWAIT lub ustawiony uchwyt SIGCHLD na SIG_IGN, to kod ten jest ignorowany. Jeśli proces macierzysty czekał na potomny, jest on powiadamiany o kodzie powrotu. W obu przypadkach kończący się proces ginie natychmiast. Jeśli proces macierzysty nie poinformował, że nie jest zainteresowany kodem zakończenia ani nie czeka, kończący się proces przechodzi w proces "zombie" (który nie zawiera nic oprócz pojedynczego bajtu reprezentującego kod zakończenia) tak, że proces macierzysty może poznać kod powrotu poprzez późniejsze wywołanie jednej z funkcji wait(2).

Jeśli implementacja wspiera 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.

Jeśli proces 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).

O STRONIE

Angielska wersja tej strony pochodzi z wydania 3.71 projektu Linux man-pages. Opis projektu, informacje dotyczące zgłaszania błędów, oraz najnowszą wersję oryginału można znaleźć pod adresem http://www.kernel.org/doc/man-pages/.

TŁUMACZENIE

Autorami polskiego tłumaczenia niniejszej strony podręcznika man są: Adam Byrtek (PTM) <[email protected]>, Andrzej Krzysztofowicz (PTM) <[email protected]>, Robert Luberda <[email protected]> i Michał Kułach <[email protected]>.

Polskie tłumaczenie jest częścią projektu manpages-pl; uwagi, pomoc, zgłaszanie błędów na stronie http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją 3.71 oryginału.