_exit(2)




NAME

     exit, _exit - terminate process


SYNOPSIS

     #include <stdlib.h>

     void exit(int status);

     #include <unistd.h>

     void _exit(int status);


DESCRIPTION

     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
     tmpfile(3C).

     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
           waitpid(2).

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

        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
           end immediately.

        o  If the process has process, text  or  data  locks,  an
           UNLOCK is performed (see plock(3C) and memcntl(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
           acct(2)).

        o  An  extended  accounting  record  is  written  to  the
           extended  process  accounting  file  if  the  system's
           extended process accounting facility is  enabled  (see
           acctadm(1M)).

        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
           accounting file.


RETURN VALUES

     These functions do not return.


ERRORS

     No errors are defined.


USAGE

     Normally applications should use exit() rather than _exit().


ATTRIBUTES

     See attributes(5) for descriptions of the  following  attri-
     butes:

     ____________________________________________________________
    |       ATTRIBUTE TYPE        |       ATTRIBUTE VALUE       |
    |_____________________________|_____________________________|
    | MT-Level                    | _exit() is Async-Signal Safe|
    |_____________________________|_____________________________|


SEE ALSO

     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),
     wait3(3C), attributes(5)


Man(1) output converted with man2html