When a service is started with "/etc/init.d/<service> trace" or when
it has seccomp enabled (i.e. runs under seccomp-trace), stopping the
service with "/etc/init.d/<service> 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 <sojkam1@fel.cvut.cz>
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;
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();