.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
.\" and Copyright (c) 2004 by Michael Kerrisk <mtk.manpages@gmail.com>
.\"
.\" %%%LICENSE_START(VERBATIM)
.\" 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_END
.\"
.\" Modified Sat Jul 24 13:32:44 1993 by Rik Faith (faith@cs.unc.edu)
.\" Modified Mon Jun 23 14:09:52 1997 by aeb - add EINTR.
.\" Modified Tue Jul  7 12:26:42 1998 by aeb - changed return value wait3
.\" Modified 2004-11-11, Michael Kerrisk <mtk.manpages@gmail.com>
.\"	Rewrote much of this page, and removed much duplicated text,
.\"		replacing with pointers to wait.2
.\"
.TH WAIT4 2  2018-04-30 "Linux" "Linux Programmer's Manual"
.SH NAME
wait3, wait4 \- wait for process to change state, BSD style
.SH SYNOPSIS
.nf
.B #include <sys/types.h>
.B #include <sys/time.h>
.B #include <sys/resource.h>
.B #include <sys/wait.h>
.PP
.BI "pid_t wait3(int *" "wstatus" ", int " options ,
.BI "            struct rusage *" rusage );
.PP
.BI "pid_t wait4(pid_t " pid ", int *" wstatus ", int " options ,
.BI "            struct rusage *" rusage );
.fi
.PP
.in -4n
Feature Test Macro Requirements for glibc (see
.BR feature_test_macros (7)):
.in
.PP
.ad l
.BR wait3 ():
    Since glibc 2.19:
        _DEFAULT_SOURCE || _XOPEN_SOURCE\ >=\ 500
    Glibc 2.19 and earlier:
        _BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500
.\"          || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED
.br
.BR wait4 ():
    Since glibc 2.19:
        _DEFAULT_SOURCE
    Glibc 2.19 and earlier:
        _BSD_SOURCE
.ad
.SH DESCRIPTION
These functions are nonstandard; in new programs, the use of
.BR waitpid (2)
or
.BR waitid (2)
is preferable.
.PP
The
.BR wait3 ()
and
.BR wait4 ()
system calls are similar to
.BR waitpid (2),
but additionally return resource usage information about the
child in the structure pointed to by
.IR rusage .
.PP
Other than the use of the
.I rusage
argument, the following
.BR wait3 ()
call:
.PP
.in +4n
.EX
wait3(wstatus, options, rusage);
.EE
.in
.PP
is equivalent to:
.PP
.in +4n
.EX
waitpid(\-1, wstatus, options);
.EE
.in
.PP
Similarly, the following
.BR wait4 ()
call:
.PP
.in +4n
.EX
wait4(pid, wstatus, options, rusage);
.EE
.in
.PP
is equivalent to:
.PP
.in +4n
.EX
waitpid(pid, wstatus, options);
.EE
.in
.PP
In other words,
.BR wait3 ()
waits of any child, while
.BR wait4 ()
can be used to select a specific child, or children, on which to wait.
See
.BR wait (2)
for further details.
.PP
If
.I rusage
is not NULL, the
.I struct rusage
to which it points will be filled with accounting information
about the child.
See
.BR getrusage (2)
for details.
.SH RETURN VALUE
As for
.BR waitpid (2).
.SH ERRORS
As for
.BR waitpid (2).
.SH CONFORMING TO
4.3BSD.
.PP
SUSv1 included a specification of
.BR wait3 ();
SUSv2 included
.BR wait3 (),
but marked it LEGACY;
SUSv3 removed it.
.SH NOTES
Including
.I <sys/time.h>
is not required these days, but increases portability.
(Indeed,
.I <sys/resource.h>
defines the
.I rusage
structure with fields of type
.I struct timeval
defined in
.IR <sys/time.h> .)
.SS C library/kernel differences
On Linux,
.BR wait3 ()
is a library function implemented on top of the
.BR wait4 ()
system call.
.SH SEE ALSO
.BR fork (2),
.BR getrusage (2),
.BR sigaction (2),
.BR signal (2),
.BR wait (2),
.BR signal (7)
