1: /* pidwait.c - wait for child to exit */ 2: 3: #include "../h/mh.h" 4: #include <signal.h> 5: #include <stdio.h> 6: #ifdef BSD42 7: #include <sys/wait.h> 8: #endif BSD42 9: 10: 11: int pidwait (id, sigsok) 12: register int id, 13: sigsok; 14: { 15: register int pid; 16: #ifndef BSD42 17: int status; 18: #else BSD42 19: union wait status; 20: #endif BSD42 21: int (*hstat) (), (*istat) (), (*qstat) (), (*tstat) (); 22: 23: if (sigsok == NOTOK) { 24: hstat = signal (SIGHUP, SIG_IGN); 25: istat = signal (SIGINT, SIG_IGN); 26: qstat = signal (SIGQUIT, SIG_IGN); 27: tstat = signal (SIGTERM, SIG_IGN); 28: } 29: 30: while ((pid = wait (&status)) != NOTOK && pid != id) 31: continue; 32: 33: if (sigsok == NOTOK) { 34: (void) signal (SIGHUP, hstat); 35: (void) signal (SIGINT, istat); 36: (void) signal (SIGQUIT, qstat); 37: (void) signal (SIGTERM, tstat); 38: } 39: 40: #ifndef BSD42 41: return (pid == NOTOK ? NOTOK : status); 42: #else BSD42 43: return (pid == NOTOK ? NOTOK : status.w_status); 44: #endif BSD42 45: }