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
This commit is contained in:
John Michelau 2013-03-07 15:35:35 -06:00
parent bfb2aa4652
commit e7b6cf13f9

View File

@ -31,6 +31,7 @@
#include <sys/klog.h> #include <sys/klog.h>
#include <time.h> #include <time.h>
#include <unistd.h> #include <unistd.h>
#include <sys/prctl.h>
#include <cutils/debugger.h> #include <cutils/debugger.h>
#include <cutils/properties.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}; const char *args[1024] = {command};
size_t arg; size_t arg;
/* make sure the child dies when dumpstate dies */
prctl(PR_SET_PDEATHSIG, SIGKILL);
va_list ap; va_list ap;
va_start(ap, command); va_start(ap, command);
if (title) printf("------ %s (%s", title, command); if (title) printf("------ %s (%s", title, command);