EXIT(3)                FreeBSD Library Functions Manual                EXIT(3)

NAME

     exit, _Exit - perform normal program termination

LIBRARY

     Standard C Library (libc, -lc)

SYNOPSIS

     #include <stdlib.h>

     void
     exit(int status);

     void
     _Exit(int status);

DESCRIPTION

     The exit() and _Exit() functions terminate a process.

     Before termination, exit() performs the following functions in the order
     listed:

           1.   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.

           2.   Flush all open output streams.

           3.   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.

     The complete status value is available as si_status member of the
     siginfo_t structure, to the wait6(2) and sigwaitinfo(2) callers, and
     SIGCHLD signal handlers.

     Calls to the exit() function are serialized.  All functions registered by
     atexit(3) are executed in the first thread that called exit.  If any
     other thread of the process calls exit before all registered functions
     have completed or before the process terminates, the thread is blocked
     until the process terminates.  The exit status of the process is the
     status argument of the first exit call which thread proceeds the atexit
     handlers.

     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).

RETURN VALUES

     The exit() and _Exit() functions never return.

SEE ALSO

     _exit(2), abort2(2), wait(2), at_quick_exit(3), atexit(3), intro(3),
     quick_exit(3), sysexits(3), tmpfile(3)

STANDARDS

     The exit() and _Exit() functions conform to ISO/IEC 9899:1999
     ("ISO C99").

HISTORY

     The exit() function appeared in Version 1 AT&T UNIX.

FreeBSD 15.1-STABLE-HBSD         July 24, 2024                         EXIT(3)