.TH WAIT 2
.SH NAME
wait \- wait for a process to exit
.SH SYNOPSIS
.B #include <u.h>
.br
.B #include <libc.h>
.PP
.B
int wait(Waitmsg *w)
.SH DESCRIPTION
.I Wait
causes a process to wait for any child process (see
.IR fork (2))
to exit.
It returns the pid of a child that has exited
and fills in
.I w
with more information about the child.
.I W
points to a
.BR Waitmsg ,
which has this structure:
.IP
.EX
.ta 6n +\w'long 'u +\w'msg[ERRLEN];     'u
typedef
struct Waitmsg
{
	char	pid[12];	/* of loved one */
	char	time[3*12];	/* of loved one & descendants */
	char	msg[ERRLEN];
} Waitmsg;
.EE
.PP
.B Pid
is the child's
process id.
The
.B time
array contains the time the child and its descendants spent in user code,
the time spent in system calls, and the child's elapsed real time,
all in units of milliseconds.
All integers in a
.B Waitmsg
are formatted as right-justified textual numbers in 11-byte fields followed
by a blank. 
.B Msg
contains the message that the child specified in
.IR exits (2).
For a normal exit,
.B msg[0]
is zero,
otherwise
.B msg
is 
prefixed by the process name, a blank, the process id, and a colon.
.PP
If there are no more children to wait for,
.I wait
returns immediately, with return value \-1.
.SH SOURCE
.B /sys/src/libc/9syscall
.SH "SEE ALSO"
.IR fork (2),
.IR exits (2),
the
.B wait
file in
.IR proc (3)
.SH DIAGNOSTICS
Sets
.IR errstr .
