NAME
exit — terminate a
process
SYNOPSIS
#include
<stdlib.h>
void exit(int status);
DESCRIPTION
[CX] The functionality described on this reference page is aligned with the ISO C standard. Any conflict between the requirements described here and the ISO C standard is unintentional. This volume of POSIX.1-2024 defers to the ISO C standard.
The exit () function shall cause normal
process termination to occur. No functions registered by the
at_quick_exit(3) function shall be called. If a process
calls the exit () function more than once, or calls
the quick_exit(3) function in addition to the
exit () function, the behavior is undefined.
The value of status can be 0, EXIT_SUCCESS, EXIT_FAILURE, [CX] or any other value, though only the least significant 8 bits (that is, status & 0377) shall be available from wait(3) and waitpid(3); the full value shall be available from waitid(3) and in the siginfo_t passed to a signal handler for SIGCHLD.
The exit () function shall first call all
functions registered by atexit(3), in the reverse order of
their registration, except that a function is called after any previously
registered functions that had already been called at the time it was
registered. Each function is called as many times as it was registered. If,
during the call to any such function, a call to the
longjmp(3) function is made that would terminate the call
to the registered function, the behavior is undefined.
If a function registered by a call to atexit(3)
fails to return, the remaining registered functions shall not be called and
the rest of the exit () processing shall not be
completed.
The exit () function shall then flush all
open streams with unwritten buffered data. [CX] For each
stream which is the active handle to its underlying file descriptor, and for
which the file is not already at EOF and is capable of seeking, the file
offset of the underlying open file description shall be set to the file
position of the stream. For each open stream, the
exit () function shall perform the equivalent of a
close(3) on the file descriptor that is associated with
the stream. Finally, the process shall be terminated [CX]
with the same consequences as described in _Exit(3).
RETURN VALUE
The exit () function does not return.
ERRORS
No errors are defined.
EXAMPLES
See APPLICATION USAGE.
APPLICATION USAGE
When a stream that has unwritten buffered data is flushed by
exit () there is no way for the calling process to
discover whether or not exit () successfully wrote
the data to the underlying file descriptor. Therefore, it is strongly
recommended that applications always ensure there is no unwritten buffered
data in any stream when calling exit (), or
returning from the initial call to
main (),
with a status value that indicates no errors occurred.
For example, the following code demonstrates one way to ensure
that stdout has already been successfully flushed before
calling exit () with status 0. If the flush fails,
the file descriptor underlying stdout is closed so that
exit () will not try to repeat the failed write
operation. If the flush succeeds, a final check with
ferror(3) is performed to ensure that there were no write
errors during earlier flush operations (that were not handled at the
time).
int status = 0;
if (fflush(stdout) != 0) {
perror("appname: standard output");
close(fileno(stdout));
status = 1;
}
else if (ferror(stdout)) {
fputs("appname: write error on standard output\n", stderr);
status = 1;
}
exit(status);
See also _Exit(3).
RATIONALE
See _Exit(3).
FUTURE DIRECTIONS
None.
SEE ALSO
_Exit(3), at_quick_exit(3), atexit(3), exec(3), fflush(3), longjmp(3), quick_exit(3), tmpfile(3), wait(3), waitid(3)
XBD <stdlib.h>
CHANGE HISTORY
Issue 7
Austin Group Interpretation 1003.1-2001 #031 is applied,
separating the _Exit(3) and _exit(3)
functions from the exit () function.
Austin Group Interpretation 1003.1-2001 #085 is applied.
POSIX.1-2008, Technical Corrigendum 2, XSH/TC2-2008/0100 [594] is applied.
Issue 8
Austin Group Defect 610 is applied, clarifying the effects of
exit () on open streams.
Austin Group Defect 1302 is applied, aligning this function with the ISO/IEC 9899:2018 standard.
Austin Group Defect 1490 is applied, changing the EXAMPLES and APPLICATION USAGE sections.
Austin Group Defect 1629 is applied, changing the APPLICATION USAGE section.