Loading tools/makeparallel/makeparallel.cpp +10 −5 Original line number Diff line number Diff line Loading @@ -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"); } Loading Loading
tools/makeparallel/makeparallel.cpp +10 −5 Original line number Diff line number Diff line Loading @@ -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"); } Loading