summaryrefslogtreecommitdiff
path: root/cmds/dumpstate/utils.c
diff options
context:
space:
mode:
author John Michelau <w14107@motorola.com> 2013-03-07 15:35:35 -0600
committer John Michelau <w14107@motorola.com> 2013-03-11 11:44:15 -0500
commite7b6cf13f94f66ea446c95ab34040b0a577e43dc (patch)
treee0ab70f40b9dae2791fec8de3602d8bee86603c0 /cmds/dumpstate/utils.c
parentbfb2aa46529ebe4889940ff2e11e00d38b04aace (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.c4
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);