1 .\" Copyright (c) 1980, 1991, 1993, 1994
2 .\" The Regents of the University of California. All rights reserved.
4 .\" Redistribution and use in source and binary forms, with or without
5 .\" modification, are permitted provided that the following conditions
7 .\" 1. Redistributions of source code must retain the above copyright
8 .\" notice, this list of conditions and the following disclaimer.
9 .\" 2. Redistributions in binary form must reproduce the above copyright
10 .\" notice, this list of conditions and the following disclaimer in the
11 .\" documentation and/or other materials provided with the distribution.
12 .\" 3. Neither the name of the University nor the names of its contributors
13 .\" may be used to endorse or promote products derived from this software
14 .\" without specific prior written permission.
16 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
17 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
20 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 .\" @(#)wait.2 8.2 (Berkeley) 4/19/94
41 .Nd wait for processes to change status
48 .Fn wait "int *status"
50 .Fn waitpid "pid_t wpid" "int *status" "int options"
53 .Fn waitid "idtype_t idtype" "id_t id" "siginfo_t *info" "int options"
57 .Fn wait3 "int *status" "int options" "struct rusage *rusage"
59 .Fn wait4 "pid_t wpid" "int *status" "int options" "struct rusage *rusage"
62 .Fa "idtype_t idtype" "id_t id"
65 .Fa "struct __wrusage *wrusage"
66 .Fa "siginfo_t *infop"
71 function suspends execution of its calling thread until
73 information is available for a child process
74 or a signal is received.
75 On return from a successful
80 area contains information about the process that reported a status change
87 system calls provide a more general interface for programs
88 that need to wait for specific child processes,
89 that need resource utilization statistics accumulated by child processes,
90 or that require options.
91 The other wait functions are implemented using either
98 function is the most general function in this family and its distinct
101 All of the desired process statuses to be waited on must be explicitly
110 functions all implicitly wait for exited and trapped processes,
115 functions require the corresponding
119 flags to be explicitly specified.
120 This allows waiting for processes which have experienced other
121 status changes without having to also handle the exit status from
122 terminated processes.
128 argument which points to a structure defined as:
131 struct rusage wru_self;
132 struct rusage wru_children;
136 This allows the calling process to collect resource usage statistics
137 from both its own child process as well as from its grand children.
138 When no resource usage statistics are needed this pointer can be
150 the structure is filled with the same data as for a
152 signal delivered when the process changed state.
154 The set of child processes to be queried is specified by the arguments
162 arguments support many other types of
163 identifiers in addition to process IDs and process group IDs.
164 .Bl -bullet -offset indent
173 wait for the child process with a process ID equal to
183 wait for the child process with a process group ID equal to
193 wait for any child process and the
209 wait for any child process in the same process group as the caller.
212 Non-standard identifier types supported by this
218 .Bl -tag -width P_JAILID
220 Wait for processes whose effective user ID is equal to
223 Wait for processes whose effective group ID is equal to
226 Wait for processes whose session ID is equal to
228 .\" This is just how sessions work, not sure this needs to be documented here
229 If the child process started its own session,
230 its session ID will be the same as its process ID.
231 Otherwise the session ID of a child process will match the caller's session ID.
233 Waits for processes within a jail whose jail identifier is equal to
241 functions, the single
243 argument specifies the set of child processes for which to wait.
244 .Bl -bullet -offset indent
248 is -1, the call waits for any child process.
253 the call waits for any child process in the process group of the caller.
257 is greater than zero, the call waits for the process with process ID
262 is less than -1, the call waits for any process whose process group ID
263 equals the absolute value of
269 argument is defined below.
273 argument contains the bitwise OR of any of the following options.
274 .Bl -tag -width WCONTINUED
276 Report the status of selected processes that
277 have continued from a job control stop by receiving a
282 there are no processes wishing to report status.
284 Report the status of selected processes which are stopped due to a
285 .Dv SIGTTIN , SIGTTOU , SIGTSTP ,
293 Report the status of selected processes which are being traced via
295 and have trapped or reached a breakpoint.
296 This flag is implicitly set for the functions
307 functions, the flag has to be explicitly included in
309 if status reports from trapped processes are expected.
311 Report the status of selected processes which have terminated.
312 This flag is implicitly set for the functions
323 functions, the flag has to be explicitly included in
325 if status reports from terminated processes are expected.
327 Keep the process whose status is returned in a waitable state.
328 The process may be waited for again after this call completes.
335 functions, at least one of the options
343 Otherwise there will be no events for the call to report.
344 To avoid hanging indefinitely in such a case these functions
352 is non-NULL, a summary of the resources used by the terminated
353 process and all its children is returned.
357 is non-NULL, separate summaries are returned for the resources used
358 by the terminated process and the resources used by all its children.
364 structure is returned with the
370 field set to the process ID of the process reporting status.
371 For the exited process, the
375 structure contains the full 32 bit exit status passed to
379 argument of other calls only returns 8 lowest bits of the exit status.
383 option is specified and no processes
384 wish to report status,
393 Checking these fields is the only way to know if a status change was reported.
397 option is specified and no processes
398 wish to report status,
422 function is identical to
437 function is identical to
450 The following macros may be used to test the current status of the process.
451 Exactly one of the following four macros will evaluate to a non-zero
455 .It Fn WIFCONTINUED status
456 True if the process has not terminated, and
457 has continued after a job control stop.
458 This macro can be true only if the wait call specified the
461 .It Fn WIFEXITED status
462 True if the process terminated normally by a call to
466 .It Fn WIFSIGNALED status
467 True if the process terminated due to receipt of a signal.
468 .It Fn WIFSTOPPED status
469 True if the process has not terminated, but has stopped and can be restarted.
470 This macro can be true only if the wait call specified the
473 or if the child process is being traced (see
477 Depending on the values of those macros, the following macros
478 produce the remaining status information about the child process:
480 .It Fn WEXITSTATUS status
483 is true, evaluates to the low-order 8 bits
484 of the argument passed to
489 .It Fn WTERMSIG status
491 .Fn WIFSIGNALED status
492 is true, evaluates to the number of the signal
493 that caused the termination of the process.
494 .It Fn WCOREDUMP status
496 .Fn WIFSIGNALED status
497 is true, evaluates as true if the termination
498 of the process was accompanied by the creation of a core file
499 containing an image of the process when the signal was received.
500 .It Fn WSTOPSIG status
502 .Fn WIFSTOPPED status
503 is true, evaluates to the number of the signal
504 that caused the process to stop.
509 for a list of termination signals.
510 A status of 0 indicates normal termination.
512 If a parent process terminates without
513 waiting for all of its child processes to terminate,
514 the remaining child processes are re-assigned to the reaper
515 of the exiting process as the parent, see
517 .Dv PROC_REAP_ACQUIRE .
518 If no specific reaper was assigned, the process with ID 1, the init process,
519 becomes the parent of the orphaned children by default.
521 If a signal is caught while any of the
524 the call may be interrupted or restarted when the signal-catching routine
526 depending on the options in effect for the signal;
532 The implementation queues one
534 signal for each child process whose
535 status has changed; if
537 returns because the status of a child process is available, the pending
538 SIGCHLD signal associated with the process ID of the child process will
542 signals remain pending.
548 returns because the status of a child process is available, the pending
550 signal will be cleared unless another status of the child process
555 returns due to a stopped, continued,
556 or terminated child process, the process ID of the child
557 is returned to the calling process.
558 Otherwise, a value of \-1
561 is set to indicate the error.
569 returns due to a stopped, continued,
570 or terminated child process, the process ID of the child
571 is returned to the calling process.
572 If there are no children not previously awaited,
579 is specified and there are
580 no stopped, continued or exited children,
582 If an error is detected or a caught signal aborts the call,
586 is set to indicate the error.
590 returns because one or more processes have a state change to report,
592 If an error is detected,
596 is set to indicate the error.
599 is specified and there are
600 no stopped, continued or exited children,
608 must be checked against zero to determine if a process reported status.
612 family of functions will not return a child process created with
614 unless specifically directed to do so by specifying its process ID.
619 will fail and return immediately if:
622 The calling process has no existing unwaited-for
625 No status from the terminated child process is available
626 because the calling process has asked the system to discard
627 such status by ignoring the signal
637 argument points to an illegal address.
638 (May not be detected before exit of a child process.)
640 The call was interrupted by a caught signal,
641 or the signal did not have the
645 An invalid value was specified for
651 do not specify a valid set of processes.
666 functions are defined by POSIX;
671 are not specified by POSIX.
675 is an extension to the POSIX interface.
677 The ability to use the
683 only permits this flag with