Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (SunOS-5.10)
Apropos / Subsearch:
optional field

exit(2)                          System Calls                          exit(2)

       exit, _Exit, _exit - terminate process

       #include <stdlib.h>

       void exit(int status);

       void _Exit(int status);

       #include <unistd.h>

       void _exit(int status);

       The exit() function first calls all functions registered by atexit(3C),
       in the reverse order of their registration, except that a  function  is
       called  after any previously registered functions that had already been
       called at the time it was registered. Each function is called  as  many
       times as it was registered. If, during the call to any such function, a
       call to the longjmp(3C) function is made that would terminate the  call
       to the registered function, the behavior is undefined.

       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  open  streams  with  unwritten
       buffered  data,  closes all open streams, and removes all files created
       by tmpfile(3C).

       The _Exit() and _exit() functions are functionally equivalent. They  do
       not call functions registered with atexit(), do not call any registered
       signal handlers, and do not flush open streams.

       The _exit(),  _Exit(),  and  exit()  functions  terminate  the  calling
       process with the following consequences:

         o  All   of  the  file  descriptors,  directory  streams,  conversion
            descriptors and message catalogue descriptors open in the  calling
            process are closed.

         o  If  the  parent  process  of  the  calling  process is executing a
            wait(3C), wait3(3C), waitid(2), or waitpid(3C),  and  has  neither
            set  its SA_NOCLDWAIT flag nor set SIGCHLD to SIG_IGN, it is noti-
            fied 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  avail-
            able  to it when the parent subsequently executes wait(), wait3(),
            waitid(), or waitpid().

         o  If the parent process of the calling process is  not  executing  a
            wait(),  wait3(),  waitid(),  or  waitpid(),  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 inac-
            tive process and it will be deleted at some later  time  when  its
            parent process executes wait(), wait3(), waitid(), or waitpid(). 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  overlaid  with
            time  accounting  information (see <&lt;sys/proc.h>&gt;) 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 ter-
            minates 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

         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  con-
            trolling terminal belonging to the calling process.

         o  If  the process is a controlling process, the controlling terminal
            associated with the session is  disassociated  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 signal 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 discarded, and the lifetime
            of the calling process will end immediately.

         o  If the process has process, text or data locks, an UNLOCK is  per-
            formed (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

         o  An accounting record is written on the accounting file if the sys-
            tem'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 facil-
            ity 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.

       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 attributes:

       tab()     allbox;     cw(2.750000i)|    cw(2.750000i)    lw(2.750000i)|
       lw(2.750000i).  ATTRIBUTE TYPEATTRIBUTE VALUE Interface  StabilityStan-
       dard MT-LevelSee below.

       The _exit() and _Exit() functions are Async-Signal-Safe.

       acctadm(1M),   intro(2),   acct(2),   close(2),  memcntl(2),  semop(2),
       shmget(2), sigaction(2), times(2), waitid(2),  atexit(3C),  fclose(3C),
       mq_close(3RT),   plock(3C),   signal.h(3HEAD),  tmpfile(3C),  wait(3C),
       wait3(3C), waitpid(3C), attributes(5), standards(5)

SunOS 5.10                        10 Dec 2003                          exit(2)