3/15/72 WAIT (II) NAME wait -- wait for process to die SYNOPSIS sys wait / wait = 7. (process ID in r0) (termination status/user status in MQ) DESCRIPTION wait causes its caller to delay until one of its child processes terminates. If any child has al- ready died, return is immediate; if there are no children, return is immediate with the error bit set. In the case of several children several waits are needed to learn of all the deaths. If the error bit is not set on return, the MQ high byte contains the low byte of the child pro- cess r0 when it terminated. The MQ low byte con- tains the termination status of the process from the following list: 0 exit 1 bus error 2 trace trap 3 illegal instruction 4 IOT trap 5 power fail trap 6 EMT trap 7 bad system call 8 quit 9 interrupt 10 kill (see kill(II)) +16 core image produced FILES -- SEE ALSO exit(II), fork(II) DIAGNOSTICS error bit (c-bit) on if no children not previ- ously waited for. BUGS A child which dies but is never waited for is not really gone in that it still consumes disk swap and system table space. This can make it impos- sible to create new processes. The bug can be noticed when several "&" separators are given to the shell not followed by a command without an ampersand. Ordinarily things clean themselves up when an ordinary command is typed, but is possi- ble to get into a situation in which no commands are accepted, so no waits are done; the system is then hung. The fix, probably, is to have a new kind of fork which creates a process for which no wait is nec- essary (or possible); also to limit the number of active or inactive descendants allowed to a pro- cess. OWNER ken, dmr