summaryrefslogtreecommitdiffstats
path: root/man-pages-posix-2013/man3p/_Exit.3p
diff options
context:
space:
mode:
Diffstat (limited to 'man-pages-posix-2013/man3p/_Exit.3p')
-rw-r--r--man-pages-posix-2013/man3p/_Exit.3p451
1 files changed, 451 insertions, 0 deletions
diff --git a/man-pages-posix-2013/man3p/_Exit.3p b/man-pages-posix-2013/man3p/_Exit.3p
new file mode 100644
index 0000000..67bf8b8
--- /dev/null
+++ b/man-pages-posix-2013/man3p/_Exit.3p
@@ -0,0 +1,451 @@
+'\" et
+.TH _EXIT "3P" 2013 "IEEE/The Open Group" "POSIX Programmer's Manual"
+.SH PROLOG
+This manual page is part of the POSIX Programmer's Manual.
+The Linux implementation of this interface may differ (consult
+the corresponding Linux manual page for details of Linux behavior),
+or the interface may not be implemented on Linux.
+
+.SH NAME
+_Exit,
+_exit
+\(em terminate a process
+.SH SYNOPSIS
+.LP
+.nf
+#include <stdlib.h>
+.P
+void _Exit(int \fIstatus\fP);
+.P
+#include <unistd.h>
+.P
+void _exit(int \fIstatus\fP);
+.fi
+.SH DESCRIPTION
+For
+\fI_Exit\fR():
+The functionality described on this reference page is aligned with the
+ISO\ C standard. Any conflict between the requirements described here and the
+ISO\ C standard is unintentional. This volume of POSIX.1\(hy2008 defers to the ISO\ C standard.
+.P
+The value of
+.IR status
+may be 0, EXIT_SUCCESS, EXIT_FAILURE,
+or any other value, though only the least significant 8 bits (that is,
+.IR status
+& 0377) shall be available to a waiting parent process.
+.P
+The
+\fI_Exit\fR()
+and
+\fI_exit\fR()
+functions shall be functionally equivalent.
+.P
+The
+\fI_Exit\fR()
+and
+\fI_exit\fR()
+functions shall not call functions registered with
+\fIatexit\fR()
+nor any registered signal handlers.
+Open streams shall not be flushed.
+Whether open streams are closed (without flushing) is
+implementation-defined. Finally, the calling process shall be
+terminated with the consequences described below.
+.SS "Consequences of Process Termination"
+.P
+Process termination caused by any reason shall have the following
+consequences:
+.TP 10
+.BR Note:
+These consequences are all extensions to the ISO\ C standard and are not further
+CX shaded. However, functionality relating to the XSI option is shaded.
+.P
+.IP " *" 4
+All of the file descriptors, directory streams,
+conversion descriptors, and message catalog descriptors
+open in the calling process shall be closed.
+.IP " *" 4
+If the parent process of the calling process is executing a
+\fIwait\fR(),
+\fIwaitid\fR(),
+or
+\fIwaitpid\fR(),
+and has neither set its SA_NOCLDWAIT flag nor set SIGCHLD to SIG_IGN,
+it shall be notified of termination of the calling process and the
+low-order eight bits (that is, bits 0377) of
+.IR status
+shall be made available to it. If the parent is not waiting, the child's
+status shall be made available to it when the parent subsequently
+executes
+\fIwait\fR(),
+\fIwaitid\fR(),
+or
+\fIwaitpid\fR().
+.RS 4
+.P
+The semantics of the
+\fIwaitid\fR()
+function shall be equivalent to
+\fIwait\fR().
+.RE
+.IP " *" 4
+If the parent process of the calling process is not executing a
+\fIwait\fR(),
+\fIwaitid\fR(),
+or
+\fIwaitpid\fR(),
+and has neither set its SA_NOCLDWAIT flag nor set SIGCHLD to SIG_IGN,
+the calling process shall be transformed into a \fIzombie process\fP.
+A \fIzombie process\fP is an inactive process and it shall be deleted
+at some later time when its parent process executes
+\fIwait\fR(),
+\fIwaitid\fR(),
+or
+\fIwaitpid\fR().
+.RS 4
+.P
+The semantics of the
+\fIwaitid\fR()
+function shall be equivalent to
+\fIwait\fR().
+.RE
+.IP " *" 4
+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.
+.IP " *" 4
+Either:
+.RS 4
+.P
+If the implementation supports the SIGCHLD
+signal, a SIGCHLD shall be sent to the parent process.
+.P
+Or:
+.P
+If the parent process has set its SA_NOCLDWAIT flag,
+or set SIGCHLD to SIG_IGN, the status shall be
+discarded, and the lifetime of the calling process shall end
+immediately. If SA_NOCLDWAIT is set, it is implementation-defined
+whether a SIGCHLD signal is sent to the parent process.
+.RE
+.IP " *" 4
+The parent process ID of all of the existing child processes and
+zombie processes of the calling process shall be set to the process ID
+of an implementation-defined system process. That is, these processes
+shall be inherited by a special system process.
+.IP " *" 4
+Each attached shared-memory segment is detached and the value of
+.IR shm_nattch
+(see
+\fIshmget\fR())
+in the data structure associated with its shared memory ID
+shall be decremented by 1.
+.IP " *" 4
+For each semaphore for which the calling process has set a
+.IR semadj
+value (see
+\fIsemop\fR()),
+that value shall be added to the
+.IR semval
+of the specified semaphore.
+.IP " *" 4
+If the process is a controlling process, the SIGHUP
+signal shall be sent to each process in the foreground process group of
+the controlling terminal belonging to the calling process.
+.IP " *" 4
+If the process is a controlling process, the controlling terminal
+associated with the session shall be disassociated from the session,
+allowing it to be acquired by a new controlling process.
+.IP " *" 4
+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 shall be sent to each
+process in the newly-orphaned process group.
+.IP " *" 4
+All open named semaphores in the calling process shall be closed as
+if by appropriate calls to
+\fIsem_close\fR().
+.IP " *" 4
+Any memory locks established by the process via calls to
+\fImlockall\fR()
+or
+\fImlock\fR()
+shall be removed. If locked pages in the address space of the calling
+process are also mapped into the address spaces of other processes and
+are locked by those processes, the locks established by the other
+processes shall be unaffected by the call by this process to
+\fI_Exit\fR()
+or
+\fI_exit\fR().
+.IP " *" 4
+Memory mappings that were created in the process shall be unmapped
+before the process is destroyed.
+.IP " *" 4
+Any blocks of typed memory that were mapped in the calling process
+shall be unmapped, as if
+\fImunmap\fR()
+was implicitly called to unmap them.
+.IP " *" 4
+All open message queue descriptors in the calling process shall be
+closed as if by appropriate calls to
+\fImq_close\fR().
+.IP " *" 4
+Any outstanding cancelable asynchronous I/O operations may be
+canceled. Those asynchronous I/O operations that are not canceled
+shall complete as if the
+\fI_Exit\fR()
+or
+\fI_exit\fR()
+operation had not yet occurred, but any associated signal notifications
+shall be suppressed. The
+\fI_Exit\fR()
+or
+\fI_exit\fR()
+operation may block awaiting such I/O completion. Whether any
+I/O is canceled, and which I/O may be canceled upon
+\fI_Exit\fR()
+or
+\fI_exit\fR(),
+is implementation-defined.
+.IP " *" 4
+Threads terminated by a call to
+\fI_Exit\fR()
+or
+\fI_exit\fR()
+shall not invoke their cancellation cleanup handlers or per-thread data
+destructors.
+.IP " *" 4
+If the calling process is a trace controller process, any trace streams
+that were created by the calling process shall be shut down as
+described by the
+\fIposix_trace_shutdown\fR()
+function, and mapping of trace event names to trace event type identifiers
+of any process built for these trace streams may be deallocated.
+.SH "RETURN VALUE"
+These functions do not return.
+.SH ERRORS
+No errors are defined.
+.LP
+.IR "The following sections are informative."
+.SH EXAMPLES
+None.
+.SH "APPLICATION USAGE"
+Normally applications should use
+\fIexit\fR()
+rather than
+\fI_Exit\fR()
+or
+\fI_exit\fR().
+.SH RATIONALE
+.SS "Process Termination"
+.P
+Early proposals drew a distinction between normal and abnormal process
+termination. Abnormal termination was caused only by certain signals
+and resulted in implementation-defined ``actions'', as discussed below.
+Subsequent proposals distinguished three types of termination:
+\fInormal termination\fP (as in the current specification), \fIsimple
+abnormal termination\fP, and \fIabnormal termination with actions\fP.
+Again the distinction between the two types of abnormal termination was
+that they were caused by different signals and that
+implementation-defined actions would result in the latter case. Given
+that these actions were completely implementation-defined, the early
+proposals were only saying when the actions could occur and how their
+occurrence could be detected, but not what they were. This was of
+little or no use to conforming applications, and thus the distinction is
+not made in this volume of POSIX.1\(hy2008.
+.P
+The implementation-defined actions usually include, in most
+historical implementations, the creation of a file named
+.BR core
+in the current working directory of the process. This file contains an
+image of the memory of the process, together with descriptive
+information about the process, perhaps sufficient to reconstruct the
+state of the process at the receipt of the signal.
+.P
+There is a potential security problem in creating a
+.BR core
+file if the process was set-user-ID
+and the current user is not the owner of the program, if the process
+was set-group-ID
+and none of the user's groups match the group of the program, or if the
+user does not have permission to write in the current directory. In
+this situation, an implementation either should not create a
+.BR core
+file or should make it unreadable by the user.
+.P
+Despite the silence of this volume of POSIX.1\(hy2008 on this feature, applications are
+advised not to create files named
+.BR core
+because of potential conflicts in many implementations. Some
+implementations use a name other than
+.BR core
+for the file; for example, by appending the process ID to the filename.
+.SS "Terminating a Process"
+.P
+It is important that the consequences of process termination as
+described occur regardless of whether the process called
+\fI_exit\fR()
+(perhaps indirectly through
+\fIexit\fR())
+or instead was terminated due to a signal or for some other reason.
+Note that in the specific case of
+\fIexit\fR()
+this means that the
+.IR status
+argument to
+\fIexit\fR()
+is treated in the same way as the
+.IR status
+argument to
+\fI_exit\fR().
+.P
+A language other than C may have other termination primitives than the
+C-language
+\fIexit\fR()
+function, and programs written in such a language should use its native
+termination primitives, but those should have as part of their function
+the behavior of
+\fI_exit\fR()
+as described. Implementations in languages other than C are outside
+the scope of this version of this volume of POSIX.1\(hy2008, however.
+.P
+As required by the ISO\ C standard, using
+.BR return
+from
+\fImain\fR()
+has the same behavior (other than with respect to language scope
+issues) as calling
+\fIexit\fR()
+with the returned value. Reaching the end of the
+\fImain\fR()
+function has the same behavior as calling
+.IR exit (0).
+.P
+A value of zero (or EXIT_SUCCESS, which is required to be zero)
+for the argument
+.IR status
+conventionally indicates successful termination. This corresponds to
+the specification for
+\fIexit\fR()
+in the ISO\ C standard. The convention is followed by utilities such as
+.IR make
+and various shells, which interpret a zero status
+from a child process as success. For this reason, applications should
+not call \fIexit\fP(0) or \fI_exit\fP(0) when they terminate
+unsuccessfully; for example, in signal-catching functions.
+.P
+Historically, the implementation-defined process that inherits
+children whose parents have terminated without waiting on them is
+called
+.IR init
+and has a process ID of 1.
+.P
+The sending of a SIGHUP
+to the foreground process group when a controlling process terminates
+corresponds to somewhat different historical implementations. In System
+V, the kernel sends a
+SIGHUP on termination of (essentially) a controlling process. In 4.2 BSD,
+the kernel does not send SIGHUP in a case like this, but the termination
+of a controlling process is usually noticed by a system daemon, which
+arranges to send a SIGHUP to the foreground process group with the
+\fIvhangup\fR()
+function. However, in 4.2 BSD, due to the behavior of the shells that
+support job control,
+the controlling process is usually a shell with no other processes in
+its process group. Thus, a change to make
+\fI_exit\fR()
+behave this way in such systems should not cause problems with existing
+applications.
+.P
+The termination of a process may cause a process group to become
+orphaned in either of two ways.
+The connection of a process group to its parent(s) outside of the group
+depends on both the parents and their children. Thus, a process group
+may be orphaned by the termination of the last connecting parent
+process outside of the group or by the termination of the last direct
+descendant of the parent process(es). In either case, if the
+termination of a process causes a process group to become orphaned,
+processes within the group are disconnected from their job control
+shell, which no longer has any information on the existence of the
+process group. Stopped processes within the group would languish
+forever. In order to avoid this problem, newly orphaned process groups
+that contain stopped processes are sent a SIGHUP signal and a SIGCONT
+signal to indicate that they have been disconnected from their
+session.
+The SIGHUP signal causes the process group members to terminate unless
+they are catching or ignoring SIGHUP. Under most circumstances, all of
+the members of the process group are stopped if any of them are
+stopped.
+.P
+The action of sending a SIGHUP and a SIGCONT signal to members of a
+newly orphaned process group is similar to the action of 4.2 BSD, which
+sends SIGHUP and SIGCONT to each stopped child of an exiting process.
+If such children exit in response to the SIGHUP, any additional
+descendants receive similar treatment at that time. In this volume of POSIX.1\(hy2008, the
+signals are sent to the entire process group at the same time. Also,
+in this volume of POSIX.1\(hy2008, but not in 4.2 BSD, stopped processes may be orphaned, but
+may be members of a process group that is not orphaned; therefore, the
+action taken at
+\fI_exit\fR()
+must consider processes other than child processes.
+.P
+It is possible for a process group to be orphaned by a call to
+\fIsetpgid\fR()
+or
+\fIsetsid\fR(),
+as well as by process termination. This volume of POSIX.1\(hy2008 does not require sending
+SIGHUP and SIGCONT in those cases, because, unlike process termination,
+those cases are not caused accidentally by applications that are
+unaware of job control. An implementation can choose to send SIGHUP
+and SIGCONT in those cases as an extension; such an extension must be
+documented as required in
+.IR <signal.h> .
+.P
+The ISO/IEC\ 9899:\|1999 standard adds the
+\fI_Exit\fR()
+function that results in immediate program termination without
+triggering signals or
+\fIatexit\fR()-registered
+functions. In POSIX.1\(hy2008, this is equivalent to the
+\fI_exit\fR()
+function.
+.SH "FUTURE DIRECTIONS"
+None.
+.SH "SEE ALSO"
+.IR "\fIatexit\fR\^(\|)",
+.IR "\fIexit\fR\^(\|)",
+.IR "\fImlock\fR\^(\|)",
+.IR "\fImlockall\fR\^(\|)",
+.IR "\fImq_close\fR\^(\|)",
+.IR "\fImunmap\fR\^(\|)",
+.IR "\fIposix_trace_create\fR\^(\|)",
+.IR "\fIsem_close\fR\^(\|)",
+.IR "\fIsemop\fR\^(\|)",
+.IR "\fIsetpgid\fR\^(\|)",
+.IR "\fIsetsid\fR\^(\|)",
+.IR "\fIshmget\fR\^(\|)",
+.IR "\fIwait\fR\^(\|)",
+.IR "\fIwaitid\fR\^(\|)"
+.P
+The Base Definitions volume of POSIX.1\(hy2008,
+.IR "\fB<stdlib.h>\fP",
+.IR "\fB<unistd.h>\fP"
+.SH COPYRIGHT
+Portions of this text are reprinted and reproduced in electronic form
+from IEEE Std 1003.1, 2013 Edition, Standard for Information Technology
+-- Portable Operating System Interface (POSIX), The Open Group Base
+Specifications Issue 7, Copyright (C) 2013 by the Institute of
+Electrical and Electronics Engineers, Inc and The Open Group.
+(This is POSIX.1-2008 with the 2013 Technical Corrigendum 1 applied.) In the
+event of any discrepancy between this version and the original IEEE and
+The Open Group Standard, the original IEEE and The Open Group Standard
+is the referee document. The original Standard can be obtained online at
+http://www.unix.org/online.html .
+
+Any typographical or formatting errors that appear
+in this page are most likely
+to have been introduced during the conversion of the source files to
+man page format. To report such errors, see
+https://www.kernel.org/doc/man-pages/reporting_bugs.html .