Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
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 <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 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:

       |      ATTRIBUTE	TYPE	     |	    ATTRIBUTE VALUE	   |
       |Interface Stability	     |Standard			   |
       |MT-Level		     |See 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)


Want to link to this manual page? Use this URL:

home | help