From dfbf2767f2aa9eacb282441942d31ac20d0f9362 Mon Sep 17 00:00:00 2001 From: MadMaurice Date: Fri, 15 Jan 2021 20:22:22 +0100 Subject: [PATCH] Handle signal handler setup error properly in head process --- main.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/main.c b/main.c index fecd39d..455c10b 100644 --- a/main.c +++ b/main.c @@ -83,7 +83,14 @@ int main(int argc, char* const* argv) pid_child = pid; if (sigaction(SIGTERM, &forward_signal_descriptor, NULL) == -1) { - printf("Unable to setup signal handler in head\n"); + int err = errno; + // Have to kill child here, otherwise that gets orphaned and runs anyway. + // Use SIGKILL here because it might forward SIGTERM to its child and that + // decides not to stop. + kill(pid_child, SIGKILL); + // Restore errno as it might've been overwritten by kill + errno = err; + err(errno, "Unable to set up signal handler in head process"); } // parent waits for child then exits // Could be interrupt due to a signal. Retry in that case.