await, wait, waitpid - wait for a process to exit
int await(char *s, int n)
Wait causes a process to wait for any child process (see fork(2)) to
exit. It returns a Waitmsg holding information about the exited child.
A Waitmsg has this structure:
int pid; /* of loved one */
ulong time; /* of loved one & descendants */
Pid is the child's process id. The 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.
Msg contains the message that the child specified in exits(2). For a
normal exit, msg is zero, otherwise msg is the exit string prefixed
by the process name, a blank, the process id, and a colon.
If there are no more children to wait for, wait returns immediately,
with return value nil.
The Waitmsg structure is allocated by malloc(2) and should be freed
after use. For programs that only need the pid of the exiting program,
waitpid returns just the pid and discards the rest of the information.
The underlying system call is await, which fills in the n-byte buffer s
with a textual representation of the pid, times, and exit string.
There is no terminal NUL. The return value is the length, in bytes, of
The buffer filled in by await may be parsed (after appending a NUL)
using tokenize (see getfields(2)); the resulting fields are, in order,
pid, the three times, and the exit string, which will be '' for normal
exit. If the representation is longer than n bytes, it is truncated
but, if possible, properly formatted. The information that does not
fit in the buffer is discarded, so a subsequent call to await will
return the information about the next exiting child, not the remainder
of the truncated message. In other words, each call to await returns
the information about one child, blocking if necessary if no child has
If the calling process has no living children, await and waitpid return
SEE ALSOfork(2), exits(2), the wait file in proc(3)DIAGNOSTICS
These routines set errstr.