diff options
| author | 2013-03-07 15:35:35 -0600 | |
|---|---|---|
| committer | 2013-03-11 11:44:15 -0500 | |
| commit | e7b6cf13f94f66ea446c95ab34040b0a577e43dc (patch) | |
| tree | e0ab70f40b9dae2791fec8de3602d8bee86603c0 /cmds/dumpstate/utils.c | |
| parent | bfb2aa46529ebe4889940ff2e11e00d38b04aace (diff) | |
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
Diffstat (limited to 'cmds/dumpstate/utils.c')
| -rw-r--r-- | cmds/dumpstate/utils.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/cmds/dumpstate/utils.c b/cmds/dumpstate/utils.c index 8f132d5f47..eaef3d4747 100644 --- a/cmds/dumpstate/utils.c +++ b/cmds/dumpstate/utils.c @@ -31,6 +31,7 @@ #include <sys/klog.h> #include <time.h> #include <unistd.h> +#include <sys/prctl.h> #include <cutils/debugger.h> #include <cutils/properties.h> @@ -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); |