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