.\" Copyright (C) 2001 Andries Brouwer <aeb@cwi.nl>.
.\"
.\" %%%LICENSE_START(VERBATIM)
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Permission is granted to copy and distribute modified versions of this
.\" manual under the conditions for verbatim copying, provided that the
.\" entire resulting derived work is distributed under the terms of a
.\" permission notice identical to this one.
.\"
.\" Since the Linux kernel and libraries are constantly changing, this
.\" manual page may be incorrect or out-of-date.  The author(s) assume no
.\" responsibility for errors or omissions, or for damages resulting from
.\" the use of the information contained herein.  The author(s) may not
.\" have taken the same level of care in the production of this manual,
.\" which is licensed free of charge, as they might when working
.\" professionally.
.\"
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
.\" %%%LICENSE_END
.\"
.\" FIXME . There are a lot of other process termination actions that
.\" could be listed on this page. See, for example, the list in the
.\" POSIX exit(3p) page.
.\"
.TH EXIT 3  2021-03-22 "Linux" "Linux Programmer's Manual"
.SH NAME
exit \- cause normal process termination
.SH SYNOPSIS
.nf
.B #include <stdlib.h>
.PP
.BI "noreturn void exit(int " status );
.fi
.SH DESCRIPTION
The
.BR exit ()
function causes normal process termination and the least significant byte of
.I status
(i.e., \fIstatus & 0xFF\fP) is returned to the parent (see
.BR wait (2)).
.PP
All functions registered with
.BR atexit (3)
and
.BR on_exit (3)
are called, in the reverse order of their registration.
(It is possible for one of these functions to use
.BR atexit (3)
or
.BR on_exit (3)
to register an additional
function to be executed during exit processing;
the new registration is added to the front of the list of functions
that remain to be called.)
If one of these functions does not return
(e.g., it calls
.BR _exit (2),
or kills itself with a signal),
then none of the remaining functions is called,
and further exit processing (in particular, flushing of
.BR stdio (3)
streams) is abandoned.
If a function has been registered multiple times using
.BR atexit (3)
or
.BR on_exit (3),
then it is called as many times as it was registered.
.PP
All open
.BR stdio (3)
streams are flushed and closed.
Files created by
.BR tmpfile (3)
are removed.
.PP
The C standard specifies two constants,
\fBEXIT_SUCCESS\fP and \fBEXIT_FAILURE\fP,
that may be passed to
.BR exit ()
to indicate successful or unsuccessful
termination, respectively.
.SH RETURN VALUE
The
.BR exit ()
function does not return.
.SH ATTRIBUTES
For an explanation of the terms used in this section, see
.BR attributes (7).
.ad l
.nh
.TS
allbox;
lbx lb lb
l l l.
Interface	Attribute	Value
T{
.BR exit ()
T}	Thread safety	MT-Unsafe race:exit
.TE
.hy
.ad
.sp 1
.PP
The
.BR exit ()
function uses a global variable that is not protected,
so it is not thread-safe.
.SH CONFORMING TO
POSIX.1-2001, POSIX.1-2008, C89, C99, SVr4, 4.3BSD.
.SH NOTES
The behavior is undefined if one of the functions registered using
.BR atexit (3)
and
.BR on_exit (3)
calls either
.BR exit ()
or
.BR longjmp (3).
Note that a call to
.BR execve (2)
removes registrations created using
.BR atexit (3)
and
.BR on_exit (3).
.PP
The use of
.B EXIT_SUCCESS
and
.B EXIT_FAILURE
is slightly more portable
(to non-UNIX environments) than the use of 0 and some nonzero value
like 1 or \-1.
In particular, VMS uses a different convention.
.PP
BSD has attempted to standardize exit codes
(which some C libraries such as the GNU C library have also adopted);
see the file
.IR <sysexits.h> .
.PP
After
.BR exit (),
the exit status must be transmitted to the
parent process.
There are three cases:
.IP \(bu 3
If the parent has set
.BR SA_NOCLDWAIT ,
or has set the
.B SIGCHLD
handler to
.BR SIG_IGN ,
the status is discarded and the child dies immediately.
.IP \(bu
If the parent was waiting on the child,
it is notified of the exit status and the child dies immediately.
.IP \(bu
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
.BR waitpid (2)
(or similar) to learn the termination status of the child;
at that point the zombie process slot is released.
.PP
If the implementation supports the
.B SIGCHLD
signal, this signal
is sent to the parent.
If the parent has set
.BR SA_NOCLDWAIT ,
it is undefined whether a
.B SIGCHLD
signal is sent.
.\"
.SS Signals sent to other processes
If the exiting process is a session leader and its controlling terminal
is the controlling terminal of the session, then each process in
the foreground process group of this controlling terminal
is sent a
.B SIGHUP
signal, and the terminal is disassociated
from this session, allowing it to be acquired by a new controlling
process.
.PP
If the exit of the process causes a process group to become orphaned,
and if any member of the newly orphaned process group is stopped,
then a
.B SIGHUP
signal followed by a
.B SIGCONT
signal will be
sent to each process in this process group.
See
.BR setpgid (2)
for an explanation of orphaned process groups.
.PP
Except in the above cases,
where the signalled processes may be children of the terminating process,
termination of a process does
.I not
in general cause a signal to be sent to children of that process.
However, a process can use the
.BR prctl (2)
.B PR_SET_PDEATHSIG
operation to arrange that it receives a signal if its parent terminates.
.SH SEE ALSO
.BR _exit (2),
.BR get_robust_list (2),
.BR setpgid (2),
.BR wait (2),
.BR atexit (3),
.BR on_exit (3),
.BR tmpfile (3)
