int r;
if (WIFEXITED(status)) {
- _exit(status);
+ _exit(WEXITSTATUS(status));
}
if (WIFSIGNALED(status)) {
if (! WCOREDUMP(status) &&
(sig == SIGINT ||
+ sig == SIGTERM ||
sig == SIGHUP ||
sig == SIGPIPE ||
sig == SIGKILL)) {
struct sigaction sa;
FILLZERO(sa);
sa.sa_handler = SIG_DFL;
- r = sigaction(sig, &sa, 0);
- if (r) diee("failed to reset signal handler while propagating %s",
- signame);
-
- sigset_t sset;
- sigemptyset(&sset);
- sigaddset(&sset, sig);
- r = sigprocmask(SIG_UNBLOCK, &sset, 0);
- if (r) diee("failed to reset signal block while propagating %s",
- signame);
+ if (sig != SIGKILL) {
+ r = sigaction(sig, &sa, 0);
+ if (r) diee("failed to reset signal handler while propagating %s",
+ signame);
+
+ sigset_t sset;
+ sigemptyset(&sset);
+ sigaddset(&sset, sig);
+ r = sigprocmask(SIG_UNBLOCK, &sset, 0);
+ if (r) diee("failed to reset signal block while propagating %s",
+ signame);
+ }
raise(sig);
die("unexpectedly kept running after raising (to propagate) %s",
char got_magic[sizeof(header_magic)];
if (protocol_read_maybe(&got_magic, sizeof(got_magic)) < 0)
- return "initial monitor process quit";
+ return "initial monitor process quit"
+ " (maybe script didn't call preform_initialisation_complete?)";
if (memcmp(got_magic, header_magic, sizeof(header_magic)))
die("got unexpected protocol magic 0x%02x%02x%02x%02x",