|
|
1.1 ! root 1: /* pidwait.c - wait for child to exit */ ! 2: ! 3: #include "../h/mh.h" ! 4: #include <signal.h> ! 5: #include <stdio.h> ! 6: #if defined(POSIX) || defined(BSD42) ! 7: #include <sys/wait.h> ! 8: #endif POSIX or BSD42 ! 9: ! 10: ! 11: pidwait(id, sigsok) ! 12: register int id, sigsok; ! 13: { ! 14: register int pid; ! 15: SIGDECL (*hstat)(), (*istat)(), (*qstat)(), (*tstat)(); ! 16: #ifndef BSD42 ! 17: int status; ! 18: #else BSD42 ! 19: union wait status; ! 20: #endif BSD42 ! 21: ! 22: if (sigsok == NOTOK) { ! 23: hstat = signal (SIGHUP, SIG_IGN); ! 24: istat = signal (SIGINT, SIG_IGN); ! 25: qstat = signal (SIGQUIT, SIG_IGN); ! 26: tstat = signal (SIGTERM, SIG_IGN); ! 27: } ! 28: ! 29: #ifdef POSIX ! 30: pid = waitpid(id, &status, 0); ! 31: #else ! 32: while ((pid = wait (&status)) != NOTOK && pid != id) ! 33: continue; ! 34: #endif ! 35: ! 36: if (sigsok == NOTOK) { ! 37: (void) signal (SIGHUP, hstat); ! 38: (void) signal (SIGINT, istat); ! 39: (void) signal (SIGQUIT, qstat); ! 40: (void) signal (SIGTERM, tstat); ! 41: } ! 42: ! 43: #if defined(POSIX) || !defined(BSD42) ! 44: return (pid == NOTOK ? NOTOK : status); ! 45: #else ! 46: return (pid == NOTOK ? NOTOK : status.w_status); ! 47: #endif ! 48: } ! 49: ! 50:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.