exit, _exit - terminate process
void exit(int status);
void _exit(int status);
exit() terminates the calling process and passes status to the system
for inspection, see wait(2). Returning from main in a C program has
the same effect as exit(); the status value is the function value
returned by main (this value is undefined if main does not take care
to return a value or to call exit() explicitly).
If the calling process is multithreaded, all threads/lightweight
process in the process will be terminated.
exit() cannot return to its caller. The result of an exit() call
during exit processing is undefined.
The functions exit() and _exit(), are equivalent, except that exit()
calls functions registered by atexit() and flushes standard I/O
buffers, while _exit() does not. Both exit() and _exit() terminate
the calling process with the following consequences. The exact order
of these consequences is unspecified.
Functions registered by atexit() (see atexit(2)) are called in
reverse order of registration.
All file descriptors open in the calling process are closed.
All files created by tmpfile() are removed (see tmpfile(3S)).
If the parent process of the calling process is executing a
wait(), wait3(), or waitpid(), it is notified of the calling
process's termination, and the low-order eight bits; i.e., bits
0377 of status are made available to it (see wait(2)).
If the parent process of the calling process is not executing a
wait(), wait3(), or waitpid(), and does not have SIGCLD set to
SIG_IGN, the calling process is transformed into a zombie
process. A zombie process is a process that only occupies a slot
in the process table. It has no other space allocated either in
user or kernel space. Time accounting information is recorded
for use by times() (see times(2)).
Hewlett-Packard Company - 1 - HP-UX Release 11i: November 2000
The parent process ID is set to 1 for all of the calling
process's existing child processes and zombie processes. This
means the initialization process (proc1) inherits each of these
Threads/LWPs terminated by a call to exit() shall not invoke
their cancellation cleanup handlers or their thread specific data
Each attached shared memory segment is detached and the value of
shm_nattach in the data structure associated with its shared
memory identifier is decremented by 1 (see shmop(2)).
For each semaphore for which the calling process has set a semadj
value (see semop(2)), that semadj value is added to the semval of
the specified semaphore.
If the process has a process, text, or data lock, an unlock() is
performed, see plock(2).
An accounting record is written on the accounting file if the
system's accounting routine is enabled (see acct(2)).
A SIGCHLD signal is sent to the parent process.
If the calling process is a controlling process, the SIGHUP
signal is sent to each process in the foreground process group of
the controlling terminal belonging to the calling process. The
controlling terminal associated with the session is disassociated
from the session, allowing it to be acquired by a new controlling
If the exit of the calling process causes a process group to
become orphaned, and if any member of the newly-orphaned process
group is stopped, all processes in the newly-orphaned process
group are sent SIGHUP and SIGCONT signals.
If the current process has any child processes that are being
traced, they are sent a SIGKILL signal.
exit() was developed by HP, AT&T, and the University of California,
acct(2), plock(2), pthread_cancel(3T), pthread_exit(3T),
pthread_key_create(3T), semop(2), shmop(2), times(2), vfork(2),
wait(2), signal(5), sh(1), see exit conditions ($?).
exit(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI
Hewlett-Packard Company - 2 - HP-UX Release 11i: November 2000
_exit(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1
Hewlett-Packard Company - 3 - HP-UX Release 11i: November 2000