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.