diff options
author | Jes Sorensen <Jes.Sorensen@redhat.com> | 2010-06-10 11:42:22 +0200 |
---|---|---|
committer | Blue Swirl <blauwirbel@gmail.com> | 2010-06-12 08:49:14 +0300 |
commit | 8d963e6ae700b2a46dd3a2bde5d1e5f925702f47 (patch) | |
tree | e90c19d6fea1e95440bae1f8d06dfb4118fd5a4e /os-posix.c | |
parent | fe98ac146109e307d7e19486dcfebbc89259d34d (diff) |
Move main signal handler setup to os specificfiles.
Move main signal handler setup to os specific files.
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Acked-by: Juan Quintela <quintela@redhat.com>
Acked-by: Richard Henderson <rth@redhat.com>
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
Diffstat (limited to 'os-posix.c')
-rw-r--r-- | os-posix.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/os-posix.c b/os-posix.c index 948f662e9..01dbec2e3 100644 --- a/os-posix.c +++ b/os-posix.c @@ -26,6 +26,8 @@ #include <unistd.h> #include <fcntl.h> #include <signal.h> +#include <sys/types.h> +#include <sys/wait.h> /* Needed early for CONFIG_BSD etc. */ #include "config-host.h" @@ -39,3 +41,28 @@ void os_setup_early_signal_handling(void) act.sa_handler = SIG_IGN; sigaction(SIGPIPE, &act, NULL); } + +static void termsig_handler(int signal) +{ + qemu_system_shutdown_request(); +} + +static void sigchld_handler(int signal) +{ + waitpid(-1, NULL, WNOHANG); +} + +void os_setup_signal_handling(void) +{ + struct sigaction act; + + memset(&act, 0, sizeof(act)); + act.sa_handler = termsig_handler; + sigaction(SIGINT, &act, NULL); + sigaction(SIGHUP, &act, NULL); + sigaction(SIGTERM, &act, NULL); + + act.sa_handler = sigchld_handler; + act.sa_flags = SA_NOCLDSTOP; + sigaction(SIGCHLD, &act, NULL); +} |