- dup2(pfd[1], STDIN_FILENO);
- dup2(pfd[1], STDOUT_FILENO);
- dup2(efd[1], STDERR_FILENO);
- close(pfd[0]); close(pfd[1]);
- close(efd[0]); close(efd[1]);
- if (logfp) fclose(logfp);
+ close(pfd[0]); close(efd[0]);
+ sigprocmask(SIG_SETMASK, &oldmask, 0);
+ md[0].cur = pfd[1]; md[0].want = STDIN_FILENO;
+ md[1].cur = pfd[1]; md[1].want = STDOUT_FILENO;
+ md[2].cur = efd[1]; md[2].want = STDERR_FILENO;
+ mdup(md, 3);