From e7b6cf13f94f66ea446c95ab34040b0a577e43dc Mon Sep 17 00:00:00 2001 From: John Michelau Date: Thu, 7 Mar 2013 15:35:35 -0600 Subject: [PATCH] Ensure dumpstate children die Use prctl(PR_SET_PDEATHSIG, SIGKILL) in each forked child to ensure it dies when dumpstate dies. This is important for two cases: - dumpstate runs a timer for each child process. On expiration, it sends SIGTERM to kill the process. Sometimes SIGTERM isn't enough to kill a hung process, so the child lives on. - When dumpstate is killed by the user before completing, outstanding children continue to run and generate output. Change-Id: I96e0dc918c26d56c9fee53611980ba2edd238712 --- cmds/dumpstate/utils.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cmds/dumpstate/utils.c b/cmds/dumpstate/utils.c index 8f132d5f4..eaef3d474 100644 --- a/cmds/dumpstate/utils.c +++ b/cmds/dumpstate/utils.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include @@ -199,6 +200,9 @@ int run_command(const char *title, int timeout_seconds, const char *command, ... const char *args[1024] = {command}; size_t arg; + /* make sure the child dies when dumpstate dies */ + prctl(PR_SET_PDEATHSIG, SIGKILL); + va_list ap; va_start(ap, command); if (title) printf("------ %s (%s", title, command);