exit
, _Exit
—
perform normal program termination
Standard C Library (libc, -lc)
#include <stdlib.h>
void
exit
(int
status);
void
_Exit
(int
status);
The exit
() and _Exit
() functions
terminate a process.
Before termination, exit
() performs the
following functions in the order listed:
- Call all functions registered with the
__cxa_atexit(3)
function (which are typically destructors from the loaded dynamic
objects), and the functions registered with the
atexit(3)
function, in the reverse order of their registration.
- Flush all open output streams.
- Close all open streams.
The _Exit
() function terminates without
calling the functions registered with the
atexit(3)
function, and may or may not perform the other actions listed. The
FreeBSD implementation of the
_Exit
() function does not call destructors
registered with
__cxa_atexit(3,)
does not flush buffers, and does not close streams.
Both functions make the low-order eight bits of the
status argument available to a parent process which
has called a
wait(2)-family
function.
The C Standard (ISO/IEC 9899:1999
(“ISO C99”)) defines the values
0
, EXIT_SUCCESS
, and
EXIT_FAILURE
as possible values of
status. Cooperating processes may use other values; in
a program which might be called by a mail transfer agent, the values
described in
sysexits(3)
may be used to provide more information to the parent process.
Note that exit
() does nothing to prevent
bottomless recursion should a function registered using
atexit(3)
itself call exit
(). Such functions must call
_Exit
() instead (although this has other effects as
well which may not be desired).
The exit
() and _Exit
() functions
never return.
The exit
() and _Exit
() functions
conform to ISO/IEC 9899:1999
(“ISO C99”).
The exit
() function appeared in
Version 1 AT&T UNIX.