From 9d6b92ef1a42c3ae7763827eb42a18c25c2bf3eb Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Tue, 2 Oct 2007 13:19:25 +0100 Subject: xentop: Flush batch output on SIGTERM or SIGINT. Signed-off-by: INAKOSHI Hiroya --- tools/xenstat/xentop/xentop.c | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) (limited to 'tools/xenstat') diff --git a/tools/xenstat/xentop/xentop.c b/tools/xenstat/xentop/xentop.c index 755e322f56..bc703ffae2 100644 --- a/tools/xenstat/xentop/xentop.c +++ b/tools/xenstat/xentop/xentop.c @@ -28,6 +28,7 @@ #include #include #include +#include #if defined(__linux__) #include #endif @@ -1011,6 +1012,13 @@ static void top(void) free(domains); } +static int signal_exit; + +void signal_exit_handler(int sig) +{ + signal_exit = 1; +} + int main(int argc, char **argv) { int opt, optind = 0; @@ -1102,14 +1110,22 @@ int main(int argc, char **argv) ch = getch(); } while (handle_key(ch)); } else { - do { - gettimeofday(&curtime, NULL); - top(); - oldtime = curtime; - if ((!loop) && !(--iterations)) - break; - sleep(delay); - } while (1); + struct sigaction sa = { + .sa_handler = signal_exit_handler, + .sa_flags = 0 + }; + sigemptyset(&sa.sa_mask); + sigaction(SIGINT, &sa, NULL); + sigaction(SIGTERM, &sa, NULL); + + do { + gettimeofday(&curtime, NULL); + top(); + oldtime = curtime; + if ((!loop) && !(--iterations)) + break; + sleep(delay); + } while (!signal_exit); } /* Cleanup occurs in cleanup(), so no work to do here. */ -- cgit v1.2.3