From: Michal Sojka Date: Tue, 12 Sep 2017 11:12:47 +0000 (+0200) Subject: utrace: Forward SIGTERM to the traced process X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=582cf97315178b0f1a97ef38d6f9388cf63900fd;p=oweals%2Fprocd.git utrace: Forward SIGTERM to the traced process When a service is started with "/etc/init.d/ trace" or when it has seccomp enabled (i.e. runs under seccomp-trace), stopping the service with "/etc/init.d/ stop" stops only the tracer. The service itself continue executing. This patch ensures that the service is terminated as well. Signed-off-by: Michal Sojka --- diff --git a/trace/trace.c b/trace/trace.c index 7fe5599..d878a65 100644 --- a/trace/trace.c +++ b/trace/trace.c @@ -263,6 +263,15 @@ static void tracer_cb(struct uloop_process *c, int ret) uloop_process_add(c); } +static void sigterm_handler(int signum) +{ + /* When we receive SIGTERM, we forward it to the tracee. After + * the tracee exits, trace_cb() will be called and make us + * exit too. */ + kill(tracer.proc.pid, SIGTERM); +} + + int main(int argc, char **argv, char **envp) { int status, ch, policy = EPERM; @@ -370,6 +379,7 @@ int main(int argc, char **argv, char **envp) tracer.proc.pid = child; tracer.proc.cb = tracer_cb; uloop_process_add(&tracer.proc); + signal(SIGTERM, sigterm_handler); /* Override uloop's SIGTERM handler */ uloop_run(); uloop_done();