exit - powoduje normalne zakończenie programu
Standardowa biblioteka C (
libc,
-lc)
#include <stdlib.h>
[[noreturn]] void exit(int status);
The
exit() function causes normal process termination and the least
significant byte of
status (i.e.,
status & 0xFF) is returned
to the parent (see
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.
Funkcja
exit() nie powraca.
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-Unsafe race:exit |
Funkcja
exit() używa niezabezpieczonej zmiennej globalnej, w
związku z czym nie jest wątkowo bezpieczna.
POSIX.1-2001, POSIX.1-2008, C99, SVr4, 4.3BSD.
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 has attempted to standardize exit codes (which some C libraries such as the
GNU C library have also adopted); see the file
<sysexits.h>.
After
exit(), the exit status must be transmitted to the parent process.
There are three cases:
- •
- If the parent has set SA_NOCLDWAIT, or has set the
SIGCHLD handler to SIG_IGN, the status is discarded and the
child dies immediately.
- •
- If the parent was waiting on the child, it is notified of
the exit status and the child dies immediately.
- •
- Otherwise, the child becomes a "zombie" process:
most of the process resources are recycled, but a slot containing minimal
information about the child process (termination status, resource usage
statistics) is retained in process table. This allows the parent to
subsequently use waitpid(2) (or similar) to learn the termination
status of the child; at that point the zombie process slot is
released.
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 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).
Except in the above cases, where the signalled processes may be children of the
terminating process, termination of a process does
not in general cause
a signal to be sent to children of that process. However, a process can use
the
prctl(2) PR_SET_PDEATHSIG operation to arrange that it
receives a signal if its parent terminates.
_exit(2),
get_robust_list(2),
setpgid(2),
wait(2),
atexit(3),
on_exit(3),
tmpfile(3)
Autorami polskiego tłumaczenia niniejszej strony podręcznika
są: Adam Byrtek <
[email protected]>, Andrzej Krzysztofowicz
<
[email protected]>, Robert Luberda <
[email protected]> i
Michał Kułach <
[email protected]>
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
[email protected]