- i = signal(SIGINT, SIG_IGN);
- q = signal(SIGQUIT, SIG_IGN);
- while ((wval = wait(&stat_loc)) != pid && wval != -1);
- (void)signal(SIGINT, i);
- (void)signal(SIGQUIT, q);
- return(wval == -1 ? -1 : stat_loc.w_status);
+ omask = sigblock(sigmask(SIGINT)|sigmask(SIGQUIT)|sigmask(SIGHUP));
+ pid = waitpid(pid, &pstat, 0);
+ (void)sigsetmask(omask);
+ return(pid == -1 ? -1 : pstat.w_status);