diff options
Diffstat (limited to 'src/supervision/s6-svscan.c')
-rw-r--r-- | src/supervision/s6-svscan.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/supervision/s6-svscan.c b/src/supervision/s6-svscan.c index e07ff35..7ab959c 100644 --- a/src/supervision/s6-svscan.c +++ b/src/supervision/s6-svscan.c @@ -109,6 +109,12 @@ static void intr (void) term() ; } +static void usr1 (void) +{ + finish_arg = "poweroff" ; + term() ; +} + static void handle_signals (void) { for (;;) @@ -124,6 +130,7 @@ static void handle_signals (void) case SIGQUIT : quit() ; break ; case SIGABRT : cont = 0 ; break ; case SIGINT : intr() ; break ; + case SIGUSR1 : usr1() ; break ; } } } @@ -152,7 +159,7 @@ static void handle_control (int fd) case 'i' : intr() ; return ; case 'q' : quit() ; return ; case '0' : finish_arg = "halt" ; term() ; return ; - case '7' : finish_arg = "poweroff" ; term() ; return ; + case '7' : usr1() ; return ; case '8' : finish_arg = "other" ; term() ; return ; default : { @@ -446,6 +453,7 @@ int main (int argc, char const *const *argv) sigaddset(&set, SIGQUIT) ; sigaddset(&set, SIGABRT) ; sigaddset(&set, SIGINT) ; + sigaddset(&set, SIGUSR1) ; if (selfpipe_trapset(&set) < 0) strerr_diefu1sys(111, "trap signals") ; } |