summaryrefslogtreecommitdiffstats
path: root/man2/wait.2
diff options
context:
space:
mode:
Diffstat (limited to 'man2/wait.2')
-rw-r--r--man2/wait.2265
1 files changed, 265 insertions, 0 deletions
diff --git a/man2/wait.2 b/man2/wait.2
new file mode 100644
index 000000000..7689dc5be
--- /dev/null
+++ b/man2/wait.2
@@ -0,0 +1,265 @@
+.\" Hey Emacs! This file is -*- nroff -*- source.
+.\"
+.\" (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of this
+.\" manual under the conditions for verbatim copying, provided that the
+.\" entire resulting derived work is distributed under the terms of a
+.\" permission notice identical to this one.
+.\"
+.\" Since the Linux kernel and libraries are constantly changing, this
+.\" manual page may be incorrect or out-of-date. The author(s) assume no
+.\" responsibility for errors or omissions, or for damages resulting from
+.\" the use of the information contained herein. The author(s) may not
+.\" have taken the same level of care in the production of this manual,
+.\" which is licensed free of charge, as they might when working
+.\" professionally.
+.\"
+.\" Formatted or processed versions of this manual, if unaccompanied by
+.\" the source, must acknowledge the copyright and authors of this work.
+.\" License.
+.\"
+.\" Modified Sat Jul 24 13:30:06 1993 by Rik Faith <faith@cs.unc.edu>
+.\" Modified Sun Aug 21 17:42:42 1994 by Rik Faith <faith@cs.unc.edu>
+.\" (Thanks to Koen Holtman <koen@win.tue.nl>)
+.\" Modified Wed May 17 15:54:12 1995 by Rik Faith <faith@cs.unc.edu>
+.\" To remove *'s from status in macros (Thanks to Michael Shields).
+.\" Modified as suggested by Nick Duffek <nsd@bbc.com>, aeb, 960426
+.\" Modified Mon Jun 23 14:09:52 1997 by aeb - add EINTR.
+.\" Modified Thu Nov 26 02:12:45 1998 by aeb - add SIGCHLD stuff.
+.\" Modified Mon Jul 24 21:37:38 2000 by David A. Wheeler
+.\" <dwheeler@dwheeler.com> - noted thread issues.
+.\" Modified 26 Jun 01 by Michael Kerrisk
+.\" Added __WCLONE, __WALL, and __WNOTHREAD descriptions
+.\" Modified 2001-09-25, aeb
+.\" Modified 26 Jun 01 by Michael Kerrisk, <mtk16@ext.canterbury.ac.nz>
+.\" Updated notes on setting disposition of SIGCHLD to SIG_IGN
+.\"
+.TH WAIT 2 2000-07-24 "Linux" "Linux Programmer's Manual"
+.SH NAME
+wait, waitpid \- wait for process termination
+.SH SYNOPSIS
+.B #include <sys/types.h>
+.br
+.B #include <sys/wait.h>
+.sp
+.BI "pid_t wait(int *" "status" );
+.br
+.BI "pid_t waitpid(pid_t " pid ", int *" status ", int " options );
+.SH DESCRIPTION
+The
+.B wait
+function suspends execution of the current process until a child has
+exited, or until a signal is delivered whose action is to terminate
+the current process or to call a signal handling function. If a child
+has already exited by the time of the call (a so\-called "zombie"
+process), the function returns immediately. Any system resources used
+by the child are freed.
+
+The
+.B waitpid
+function suspends execution of the current process until a
+child as specified by the
+.I pid
+argument has exited, or until a signal is delivered whose action is to
+terminate the current process or to call a signal handling function.
+If a child as requested by
+.I pid
+has already exited by the time of the call (a so\-called "zombie"
+process), the function returns immediately. Any system resources used
+by the child are freed.
+
+The value of
+.I pid
+can be one of:
+.IP "< \-1"
+which means to wait for any child process whose process group ID is
+equal to the absolute value of
+.IR pid .
+.IP \-1
+which means to wait for any child process; this is the same
+behaviour which
+.B wait
+exhibits.
+.IP 0
+which means to wait for any child process whose process group ID is
+equal to that of the calling process.
+.IP "> 0"
+which means to wait for the child whose process ID is equal to the
+value of
+.IR pid .
+.PP
+The value of
+.I options
+is an OR of zero or more of the following constants:
+.TP
+.B WNOHANG
+which means to return immediately if no child has exited.
+.TP
+.B WUNTRACED
+which means to also return for children which are stopped
+(but not traced), and whose status has not been reported.
+Status for traced children which are stopped is provided
+also without this option.
+.PP
+(For Linux-only options, see below.)
+.PP
+If
+.I status
+is not
+.BR NULL ,
+.B wait
+or
+.B waitpid
+store status information in the location pointed to by
+.IR status .
+
+This status can be evaluated with the following macros (these macros take
+the stat buffer (an \fBint\fR) as an argument \(em not a pointer to the
+buffer!):
+.TP
+.BI WIFEXITED( status )
+returns true if the child terminated normally, that is,
+by calling exit() or _exit(), or by returning from main().
+.TP
+.BI WEXITSTATUS( status )
+evaluates to the least significant eight bits of the return code of
+the child which terminated, which may have been set as the argument to
+a call to exit() or _exit() or as the argument for a return statement
+in the main program. This macro can only be evaluated if
+.B WIFEXITED
+returned true.
+.TP
+.BI WIFSIGNALED( status )
+returns true if the child process terminated because of a signal
+which was not caught.
+.TP
+.BI WTERMSIG( status )
+returns the number of the signal that caused the child process to
+terminate. This macro can only be evaluated if
+.B WIFSIGNALED
+returned non\-zero.
+.TP
+.BI WIFSTOPPED( status )
+returns true if the child process which caused the return is currently
+stopped; this is only possible if the call was done using
+.BR WUNTRACED
+or when the child is being traced (see
+.BR ptrace (2)).
+.TP
+.BI WSTOPSIG( status )
+returns the number of the signal which caused the child to stop. This
+macro can only be evaluated if
+.B WIFSTOPPED
+returned non\-zero.
+.LP
+Some versions of Unix (e.g. Linux, Solaris, but not AIX, SunOS)
+also define a macro
+.BI WCOREDUMP( status )
+to test whether the child process dumped core. Only use this
+enclosed in #ifdef WCOREDUMP ... #endif.
+.SH "RETURN VALUE"
+The process ID of the child which exited, or zero if
+.B WNOHANG
+was used and no child was available, or \-1 on error (in which case
+.I errno
+is set to an appropriate value).
+.SH ERRORS
+.TP
+.BR ECHILD " (for " wait )
+The calling process does not have any unwaited-for children.
+.TP
+.BR ECHILD " (for " waitpid )
+The process specified in
+.I pid
+does not exist or is not a child of the calling process.
+(This can happen for one's own child if the action for SIGCHLD
+is set to SIG_IGN. See also the LINUX NOTES section about threads.)
+.TP
+.B EINTR
+.B WNOHANG
+was not set and an unblocked signal or a
+.B SIGCHLD
+was caught.
+.TP
+.B EINVAL
+The
+.I options
+argument was invalid.
+.SH NOTES
+The Single Unix Specification describes a flag SA_NOCLDWAIT (not supported
+under Linux) such that if either this flag is set, or the action for
+SIGCHLD is set to SIG_IGN
+then children that exit do not become zombies and a call to
+.BR wait ()
+or
+.BR waitpid ()
+will block until all children have exited, and then fail with
+.I errno
+set to ECHILD.
+.LP
+The original POSIX standard left the behaviour of setting SIGCHLD to
+SIG_IGN unspecified.
+Later standards, including SUSv2 and POSIX 1003.1-2001 specify the
+behaviour just described as an XSI-compliance option.
+Linux does not conform to the second of the two points just described:
+if a
+.BR wait "() or " waitpid ()
+call is made while SIGCHLD is being ignored,
+the call behaves just as though SIGCHLD were not being igored, that is,
+the call blocks until the next child terminates and then returns the
+PID and status of that child.
+.SH "LINUX NOTES"
+In the Linux kernel, a kernel-scheduled thread is not a distinct
+construct from a process. Instead, a thread is simply a process
+that is created using the Linux-unique
+.BR clone (2)
+system call; other routines such as the portable
+.BR pthread_create (3)
+call are implemented using
+.BR clone (2).
+Before Linux 2.4, a thread was just a special case of a process,
+and as a consequence one thread could not wait on the children
+of another thread, even when the latter belongs to the same thread group.
+However, POSIX prescribes such functionality, and since Linux 2.4
+a thread can, and by default will, wait on children of other threads
+in the same thread group.
+.LP
+The following Linux-specific
+.I options
+are for use with children created using
+.BR clone (2).
+.TP
+.B __WCLONE
+.\" since 0.99pl10
+Wait for "clone" children only. If omitted then wait
+for "non-clone" children only. (A "clone" child is one
+which delivers no signal, or a signal other than
+.B SIGCHLD
+to its parent upon termination.)
+This option is ignored if
+.B __WALL
+is also specified.
+.TP
+.B __WALL
+.\" since patch-2.3.48
+(Since Linux 2.4) Wait for all children, regardless of
+type ("clone" or "non-clone").
+.TP
+.B __WNOTHREAD
+.\" since patch-2.4.0-test8
+(Since Linux 2.4) Do not wait for children of other threads in
+the same thread group. This was the default before Linux 2.4.
+.SH "CONFORMING TO"
+SVr4, POSIX.1
+.SH "SEE ALSO"
+.BR clone (2),
+.BR ptrace (2),
+.BR signal (2),
+.BR wait4 (2),
+.BR pthread_create (3),
+.BR signal (7)