}
static void sigpipe_handler(int n) {
- (void)n;
- exit(EXIT_FAILURE);
+ // don't complain to stderr or stdout
+ _exit(EXIT_FAILURE);
}
int main(int argc, char *argv[]) {
}
ALOGI("begin\n");
+
memset(&sigact, 0, sizeof(sigact));
sigact.sa_handler = sigpipe_handler;
sigaction(SIGPIPE, &sigact, NULL);
+
/* set as high priority, and protect from OOM killer */
setpriority(PRIO_PROCESS, 0, -20);
FILE *oom_adj = fopen("/proc/self/oom_adj", "w");
/* make sure the child dies when dumpstate dies */
prctl(PR_SET_PDEATHSIG, SIGKILL);
+ /* just ignore SIGPIPE, will go down with parent's */
+ struct sigaction sigact;
+ memset(&sigact, 0, sizeof(sigact));
+ sigact.sa_handler = SIG_IGN;
+ sigaction(SIGPIPE, &sigact, NULL);
+
va_list ap;
va_start(ap, command);
if (title) printf("------ %s (%s", title, command);