summaryrefslogtreecommitdiff
path: root/usr/src/man/man3ucb/wait.3ucb
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/man/man3ucb/wait.3ucb')
-rw-r--r--usr/src/man/man3ucb/wait.3ucb383
1 files changed, 383 insertions, 0 deletions
diff --git a/usr/src/man/man3ucb/wait.3ucb b/usr/src/man/man3ucb/wait.3ucb
new file mode 100644
index 0000000000..a685d47b69
--- /dev/null
+++ b/usr/src/man/man3ucb/wait.3ucb
@@ -0,0 +1,383 @@
+'\" te
+.\" Copyright (c) 2007, Sun Microsystems, Inc. All Rights Reserved.
+.\" Copyright (c) 1980 Regents of the University of California. All rights reserved. The Berkeley software License Agreement specifies the terms and conditions for redistribution.
+.TH wait 3UCB "30 Oct 2007" "SunOS 5.11" "SunOS/BSD Compatibility Library Functions"
+.SH NAME
+wait, wait3, wait4, waitpid, WIFSTOPPED, WIFSIGNALED, WIFEXITED \- wait for
+process to terminate or stop
+.SH SYNOPSIS
+.LP
+.nf
+\fB/usr/ucb/cc\fR [ \fIflag\fR ... ] \fIfile\fR ...
+#include <sys/wait.h>
+
+\fBint\fR \fBwait\fR(\fIstatusp\fR)
+\fBint *\fR\fIstatusp\fR;
+.fi
+
+.LP
+.nf
+\fBint\fR \fBwaitpid\fR(\fIpid\fR, \fIstatusp\fR, \fIoptions\fR)
+\fBint\fR \fIpid\fR;
+\fBint *\fR\fIstatusp\fR;
+\fBint\fR \fIoptions\fR;
+.fi
+
+.LP
+.nf
+#include <sys/time.h>
+#include <sys/resource.h>
+
+\fBint\fR \fBwait3\fR(\fIstatusp\fR, \fIoptions\fR, \fIrusage\fR)
+\fBint *\fR\fIstatusp\fR;
+\fBint\fR \fIoptions\fR;
+\fBstruct rusage *\fR\fIrusage\fR;
+.fi
+
+.LP
+.nf
+\fBint\fR \fBwait4\fR(\fIpid\fR, \fIstatusp\fR, \fIoptions\fR, \fIrusage\fR)
+\fBint\fR \fIpid\fR;
+\fBint *\fR\fIstatusp\fR;
+\fBint\fR \fIoptions\fR;
+\fBstruct rusage *\fR\fIrusage\fR;
+.fi
+
+.LP
+.nf
+\fBWIFSTOPPED\fR(\fIstatus\fR)
+\fBint\fR \fIstatus\fR;
+.fi
+
+.LP
+.nf
+\fBWIFSIGNALED\fR(\fIstatus\fR)
+\fBint\fR \fIstatus\fR;
+.fi
+
+.LP
+.nf
+\fBWIFEXITED\fR(\fIstatus\fR)
+\fBint\fR \fIstatus\fR;
+.fi
+
+.SH DESCRIPTION
+.sp
+.LP
+The \fBwait()\fR function delays its caller until a signal is received or one
+of its child processes terminates or stops due to tracing. If any child process
+has died or stopped due to tracing and this has not been reported using
+\fBwait()\fR, return is immediate, returning the process \fBID\fR and exit
+status of one of those children. If that child process has died, it is
+discarded. If there are no children, return is immediate with the value \(mi1
+returned. If there are only running or stopped but reported children, the
+calling process is blocked.
+.sp
+.LP
+If \fIstatus\fR is not a \fINULL\fR pointer, then on return from a successful
+\fBwait()\fR call the status of the child process whose process \fBID\fR is the
+return value of \fBwait()\fR is stored in the \fBwait()\fR union pointed to by
+\fIstatus\fR. The \fBw_status\fR member of that union is an \fBint\fR; it
+indicates the cause of termination and other information about the terminated
+process in the following manner:
+.RS +4
+.TP
+.ie t \(bu
+.el o
+If the low-order 8 bits of \fBw_status\fR are equal to 0177, the child process
+has stopped; the 8 bits higher up from the low-order 8 bits of \fBw_status\fR
+contain the number of the signal that caused the process to stop.
+See\fBptrace\fR(3C) and \fBsigvec\fR(3UCB).
+.RE
+.RS +4
+.TP
+.ie t \(bu
+.el o
+If the low-order 8 bits of \fBw_status\fR are non-zero and are not equal to
+0177, the child process terminated due to a signal; the low-order 7 bits of
+\fBw_status\fR contain the number of the signal that terminated the process. In
+addition, if the low-order seventh bit of \fBw_status\fR (that is, bit 0200) is
+set, a ``core image'' of the process was produced; see \fBsigvec\fR(3UCB).
+.RE
+.RS +4
+.TP
+.ie t \(bu
+.el o
+Otherwise, the child process terminated due to an \fBexit()\fR call; the 8 bits
+higher up from the low-order 8 bits of \fBw_status\fR contain the low-order 8
+bits of the argument that the child process passed to \fBexit()\fR; see
+\fBexit\fR(2).
+.RE
+.sp
+.LP
+\fBwaitpid()\fR behaves identically to \fBwait()\fR if \fIpid\fR has a value
+of \(mi1 and \fIoptions\fR has a value of zero. Otherwise, the behavior of
+\fBwaitpid()\fR is modified by the values of \fIpid\fR and \fIoptions\fR as
+follows:
+.sp
+.LP
+\fIpid\fR specifies a set of child processes for which status is requested.
+\fBwaitpid()\fR only returns the status of a child process from this set.
+.RS +4
+.TP
+.ie t \(bu
+.el o
+If \fIpid\fR is equal to \(mi1, status is requested for any child process. In
+this respect, \fBwaitpid()\fR is then equivalent to \fBwait()\fR.
+.RE
+.RS +4
+.TP
+.ie t \(bu
+.el o
+If \fIpid\fR is greater than zero, it specifies the process \fBID\fR of a
+single child process for which status is requested.
+.RE
+.RS +4
+.TP
+.ie t \(bu
+.el o
+If \fIpid\fR is equal to zero, status is requested for any child process whose
+process group \fBID\fR is equal to that of the calling process.
+.RE
+.RS +4
+.TP
+.ie t \(bu
+.el o
+If \fIpid\fR is less than \(mi1, status is requested for any child process
+whose process group \fBID\fR is equal to the absolute value of \fIpid\fR.
+.RE
+.sp
+.LP
+\fIoptions\fR is constructed from the bitwise inclusive \fBOR\fR of zero or
+more of the following flags, defined in the header \fB<sys/wait.h>\fR:
+.sp
+.ne 2
+.mk
+.na
+\fB\fBWNOHANG\fR\fR
+.ad
+.RS 13n
+.rt
+\fBwaitpid()\fR does not suspend execution of the calling process if status is
+not immediately available for one of the child processes specified by
+\fIpid\fR.
+.RE
+
+.sp
+.ne 2
+.mk
+.na
+\fB\fBWUNTRACED\fR\fR
+.ad
+.RS 13n
+.rt
+The status of any child processes specified by \fIpid\fR that are stopped, and
+whose status has not yet been reported since they stopped, are also reported to
+the requesting process.
+.RE
+
+.sp
+.LP
+\fBwait3()\fR is an alternate interface that allows both non-blocking status
+collection and the collection of the status of children stopped by any means.
+The \fIstatus\fR parameter is defined as above. The \fIoptions\fR parameter is
+used to indicate the call should not block if there are no processes that have
+status to report (\fBWNOHANG\fR), and/or that children of the current process
+that are stopped due to a \fBSIGTTIN\fR, \fBSIGTTOU\fR, \fBSIGTSTP\fR, or
+\fBSIGSTOP\fR signal are eligible to have their status reported as well
+(\fBWUNTRACED\fR). A terminated child is discarded after it reports status, and
+a stopped process will not report its status more than once. If \fIrusage\fR is
+not a \fINULL\fR pointer, a summary of the resources used by the terminated
+process and all its children is returned. Only the user time used and the
+system time used are currently available. They are returned in
+\fBrusage.ru_utime\fR and \fBrusage.ru_stime\fR, respectively.
+.sp
+.LP
+When the \fBWNOHANG\fR option is specified and no processes have status to
+report, \fBwait3()\fR returns 0. The \fBWNOHANG\fR and \fBWUNTRACED\fR options
+may be combined by \fBORing\fR the two values.
+.sp
+.LP
+\fBwait4()\fR is another alternate interface. With a \fIpid\fR argument of 0,
+it is equivalent to \fBwait3()\fR. If \fIpid\fR has a nonzero value, then
+\fBwait4()\fR returns status only for the indicated process \fBID,\fR but not
+for any other child processes.
+.sp
+.LP
+\fBWIFSTOPPED\fR, \fBWIFSIGNALED\fR, \fBWIFEXITED\fR, are macros that take an
+argument \fIstatus\fR, of type \fBint\fR, as returned by \fBwait()\fR, or
+\fBwait3()\fR, or \fBwait4()\fR. \fBWIFSTOPPED\fR evaluates to true (1) when
+the process for which the \fBwait()\fR call was made is stopped, or to false
+(0) otherwise. \fBWIFSIGNALED\fR evaluates to true when the process was
+terminated with a signal. \fBWIFEXITED\fR evaluates to true when the process
+exited by using an \fBexit\fR(2) call.
+.SH RETURN VALUES
+.sp
+.LP
+If \fBwait()\fRor \fBwaitpid()\fR returns due to a stopped or terminated child
+process, the process ID of the child is returned to the calling process.
+Otherwise, a value of \fB\(mi1\fR is returned and \fBerrno\fR is set to
+indicate the error.
+.sp
+.LP
+If \fBwait()\fR or \fBwaitpid()\fR return due to the delivery of a signal to
+the calling process, a value of \fB\(mi1\fR is returned and \fBerrno\fR is set
+to \fBEINTR.\fR If \fBwaitpid()\fR function was invoked with \fBWNOHANG\fR set
+in \fIoptions\fR, it has at least one child process specified by \fIpid\fR for
+which status is not available, and status is not available for any process
+specified by \fIpid\fR, a value of zero is returned. Otherwise, a value of
+\fB\(mi1\fR is returned, and \fBerrno\fR is set to indicate the error.
+.sp
+.LP
+\fBwait3(\|)\fR and \fBwait4(\|)\fR return 0 if \fBWNOHANG\fR is specified and
+there are no stopped or exited children, and returns the process \fBID\fR of
+the child process if it returns due to a stopped or terminated child process.
+Otherwise, they returns a value of \fB\(mi1\fR and sets \fBerrno\fR to indicate
+the error.
+.SH ERRORS
+.sp
+.LP
+The \fBwait()\fR, \fBwait3()\fR and \fBwait4()\fR functions will fail and
+return immediately if:
+.sp
+.ne 2
+.mk
+.na
+\fB\fBECHILD\fR\fR
+.ad
+.RS 10n
+.rt
+The calling process has no existing unwaited-for child processes.
+.RE
+
+.sp
+.ne 2
+.mk
+.na
+\fB\fBEFAULT\fR\fR
+.ad
+.RS 10n
+.rt
+The \fIstatus\fR or \fIrusage\fR arguments point to an illegal address.
+.RE
+
+.sp
+.LP
+\fBwaitpid()\fR may set \fBerrno\fR to:
+.sp
+.ne 2
+.mk
+.na
+\fB\fBECHILD\fR\fR
+.ad
+.RS 10n
+.rt
+The process or process group specified by \fIpid\fR does not exist or is not a
+child of the calling process.
+.RE
+
+.sp
+.ne 2
+.mk
+.na
+\fB\fBEINTR\fR\fR
+.ad
+.RS 10n
+.rt
+The function was interrupted by a signal. The value of the location pointed to
+by \fIstatusp\fR is undefined.
+.RE
+
+.sp
+.ne 2
+.mk
+.na
+\fB\fBEINVAL\fR\fR
+.ad
+.RS 10n
+.rt
+The value of \fIoptions\fR is not valid.
+.RE
+
+.sp
+.LP
+The \fBwait()\fR, \fBwait3()\fR, and \fBwait4()\fR functions will terminate
+prematurely, return \(mi1, and set \fBerrno\fR to \fBEINTR\fR upon the arrival
+of a signal whose \fBSV_INTERRUPT\fR bit in its flags field is set (see
+\fBsigvec\fR(3UCB) and \fBsiginterrupt\fR(3UCB)). \fBsignal\fR(3UCB), sets this
+bit for any signal it catches.
+.SH SEE ALSO
+.sp
+.LP
+\fBexit\fR(2), \fBgetrusage\fR(3C), \fBptrace\fR(3C), \fBsiginterrupt\fR(3UCB),
+\fBsignal\fR(3C), \fBsignal\fR(3UCB), \fBsigvec\fR(3UCB), \fBwait\fR(3C),
+\fBwaitpid\fR(3C)
+.SH NOTES
+.sp
+.LP
+Use of these interfaces should be restricted to only applications written on
+BSD platforms. Use of these interfaces with any of the system libraries or in
+multi-thread applications is unsupported.
+.sp
+.LP
+If a parent process terminates without waiting on its children, the
+initialization process (process \fBID\fR = 1) inherits the children.
+.sp
+.LP
+The \fBwait()\fR, \fBwait3()\fR, and \fBwait4()\fR functions are automatically
+restarted when a process receives a signal while awaiting termination of a
+child process, unless the \fBSV_INTERRUPT\fR bit is set in the flags for that
+signal.
+.sp
+.LP
+Calls to \fBwait()\fR with an argument of \fB0\fR should be cast to type
+`\fBint *\fR', as in:
+.sp
+.in +2
+.nf
+\fBwait((int *)0)\fR
+.fi
+.in -2
+.sp
+
+.sp
+.LP
+Previous SunOS releases used \fBunion\fR \fBwait\fR\fB*statusp\fR and
+\fBunion\fR \fBwait\fR \fBstatus\fR in place of \fBint *statusp\fR and
+\fBint\fR status. The union contained a member \fBw_status\fR that could be
+treated in the same way as \fIstatus\fR.
+.sp
+.LP
+Other members of the \fBwait\fR union could be used to extract this information
+more conveniently:
+.RS +4
+.TP
+.ie t \(bu
+.el o
+If the \fBw_stopval\fR member had the value \fB\fR\fBWSTOPPED\fR\fB, \fR the
+child process had stopped; the value of the \fBw_stopsig\fR member was the
+signal that stopped the process.
+.RE
+.RS +4
+.TP
+.ie t \(bu
+.el o
+If the \fBw_termsig\fR member was non-zero, the child process terminated due to
+a signal; the value of the \fBw_termsig\fR member was the number of the signal
+that terminated the process. If the \fBw_coredump\fR member was non-zero, a
+core dump was produced.
+.RE
+.RS +4
+.TP
+.ie t \(bu
+.el o
+Otherwise, the child process terminated due to a call to \fBexit()\fR. The
+value of the \fBw_retcode\fR member was the low-order 8 bits of the argument
+that the child process passed to \fBexit()\fR.
+.RE
+.sp
+.LP
+\fBunion\fR \fBwait\fR is obsolete in light of the new specifications provided
+by \fIIEEE Std 1003.1-1988\fR and endorsed by \fISVID89\fR and \fIXPG3\fR.
+SunOS Release 4.1 supports \fBunion\fR\fBwait\fR for backward compatibility,
+but it will disappear in a future release.