diff --git a/tools/makeparallel/makeparallel.cpp b/tools/makeparallel/makeparallel.cpp index a99b2867a..66babdf13 100644 --- a/tools/makeparallel/makeparallel.cpp +++ b/tools/makeparallel/makeparallel.cpp @@ -357,18 +357,23 @@ int main(int argc, char* argv[]) { static pid_t pid; - // Set up signal handlers to forward SIGTERM to child - // Assume that all other signals are sent to the entire process group + // Set up signal handlers to forward SIGTERM to child. + // Assume that all other signals are sent to the entire process group, + // and that we'll wait for our child to exit instead of handling them. struct sigaction action = {}; - action.sa_flags = SA_SIGINFO | SA_RESTART, - action.sa_sigaction = [](int signal, siginfo_t*, void*) { - if (pid > 0) { + action.sa_flags = SA_RESTART; + action.sa_handler = [](int signal) { + if (signal == SIGTERM && pid > 0) { kill(pid, signal); } }; int ret = 0; + if (!ret) ret = sigaction(SIGHUP, &action, NULL); + if (!ret) ret = sigaction(SIGINT, &action, NULL); + if (!ret) ret = sigaction(SIGQUIT, &action, NULL); if (!ret) ret = sigaction(SIGTERM, &action, NULL); + if (!ret) ret = sigaction(SIGALRM, &action, NULL); if (ret < 0) { error(errno, errno, "sigaction failed"); }