System Calls exit(2)
exit, _exit - terminate process
void exit(int status);
void _exit(int status);
The exit() function first calls all functions registered by
atexit(3C), in the reverse order of their registration. Each
function is called as many times as it was registered.
If a function registered by a call to atexit(3C) fails to
return, the remaining registered functions are not called
and the rest of the exit() processing is not completed. If
exit() is called more than once, the effects are undefined.
The exit() function then flushes all output streams, closes
all open streams, and removes all files created by
The _exit() and exit() functions terminate the calling pro-
cess with the following consequences:
o All of the file descriptors, directory streams,
conversion descriptors and message catalogue descrip-
tors open in the calling process are closed.
o If the parent process of the calling process is exe-
cuting a wait(2), wait3(3C), waitid(2) or waitpid(2),
and has neither set its SA_NOCLDWAIT flag nor set
SIGCHLD to SIG_IGN, it is notified of the calling
process's termination and the low-order eight bits
(that is, bits 0377) of status are made available to
it. If the parent is not waiting, the child's status
will be made available to it when the parent subse-
quently executes wait(2), wait3(3C), waitid(2) or
o If the parent process of the calling process is not
executing a wait(2), wait3(3C), waitid(2) or wait-
pid(2), and has not set its SA_NOCLDWAIT flag, or set
SIGCHLD to SIG_IGN, the calling process is transformed
into a zombie process. A zombie process is an inactive
process and it will be deleted at some later time when
its parent process executes wait(2), wait3(3C),
waitid(2) or waitpid(2). A zombie process only
SunOS 5.9 Last change: 10 Dec 1999 1
System Calls exit(2)
occupies a slot in the process table; it has no other
space allocated either in user or kernel space. The
process table slot that it occupies is partially over-
laid with time accounting information (see
<sys/proc.h>) to be used by the times(2) function.
o Termination of a process does not directly terminate
its children. The sending of a SIGHUP signal as
described below indirectly terminates children in some
o A SIGCHLD will be sent to the parent process.
o The parent process ID of all of the calling process's
existing child processes and zombie processes is set
to 1. That is, these processes are inherited by the
initialization process (see intro(2)).
o Each mapped memory object is unmapped.
o Each attached shared-memory segment is detached and
the value of shm_nattch (see shmget(2)) in the data
structure associated with its shared memory ID is
decremented by 1.
o For each semaphore for which the calling process has
set a semadj value (see semop(2)), that value is added
to the semval of the specified semaphore.
o If the process is a controlling process, the SIGHUP
signal will be sent to each process in the foreground
process group of the controlling terminal belonging to
the calling process.
o If the process is a controlling process, the control-
ling terminal associated with the session is disasso-
ciated from the session, allowing it to be acquired by
a new controlling process.
o 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 SIGHUP sig-
nal followed by a SIGCONT signal will be sent to each
process in the newly-orphaned process group.
o If the parent process has set its SA_NOCLDWAIT flag,
or set SIGCHLD to SIG_IGN, the status will be dis-
carded, and the lifetime of the calling process will
o If the process has process, text or data locks, an
UNLOCK is performed (see plock(3C) and memcntl(2)).
SunOS 5.9 Last change: 10 Dec 1999 2
System Calls exit(2)
o All open named semaphores in the process are closed as
if by appropriate calls to sem_close(3RT). All open
message queues in the process are closed as if by
appropriate calls to mq_close(3RT). Any outstanding
asynchronous I/O operations may be cancelled.
o An accounting record is written on the accounting file
if the system's accounting routine is enabled (see
o An extended accounting record is written to the
extended process accounting file if the system's
extended process accounting facility is enabled (see
o If the current process is the last process within its
task and if the system's extended task accounting
facility is enabled (see acctadm(1M)), an extended
accounting record is written to the extended task
These functions do not return.
No errors are defined.
Normally applications should use exit() rather than _exit().
See attributes(5) for descriptions of the following attri-
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
| MT-Level | _exit() is Async-Signal Safe|
acctadm(1M), intro(2), acct(2), close(2), memcntl(2),
semop(2), shmget(2), sigaction (2), times(2), wait(2),
waitid(2), waitpid(2), atexit(3C), fclose(3C),
mq_close(3RT), plock(3C), signal(3HEAD), tmpfile(3C),
SunOS 5.9 Last change: 10 Dec 1999 3