+ while ((pid = wait(&status)) != -1) {
+ if (status.w_termsig)
+ sumstatus |= 8;
+ else
+ sumstatus |= status.w_retcode;
+ pwp = 0;
+ for (wp = listhead; wp; pwp = wp, wp = wp->next)
+ if (wp->pid == pid)
+ break;
+ if (wp == 0) {
+ printf("Unknown pid %d\n", pid);
+ continue;
+ }
+ if (pwp == 0)
+ listhead = wp->next;
+ else
+ pwp->next = wp->next;
+ if (status.w_termsig) {
+ printf("%s: EXITED WITH SIGNAL %d\n",
+ wp->name, status.w_termsig);
+ status.w_retcode = 8;
+ }
+ if (status.w_retcode != 0) {
+ wp->next = badlist;
+ badlist = wp;
+ } else {
+ wp->next = freelist;
+ freelist = wp;
+ }
+ }