From 582cf97315178b0f1a97ef38d6f9388cf63900fd Mon Sep 17 00:00:00 2001 From: Michal Sojka Date: Tue, 12 Sep 2017 13:12:47 +0200 Subject: [PATCH] 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 --- trace/trace.c | 10 ++++++++++ 1 file changed, 10 insertions(+) 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(); -- 2.11.0