[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH] SIGTERM and SIGINT handler to flush xentop -b outputs



 Flush stdout when xentop -b gets SIGINT and SIGTERM.  It is useful when
you stop xentop -b by keyboard interrupt or by other programs such as
killall from a batch script.  You would have missed the bottom part of
xentop outputs without this patch.
 This second patch calls no unsafe function in a signal handler.  The
main loop breaks and xentop exits normally when a flag is set by the
signal handler.  Stdout is flushed accordingly.

Signed-off-by: INAKOSHI Hiroya <inakoshi.hiroya@xxxxxxxxxxxxxx>


diff -r 83239b289072 tools/xenstat/xentop/xentop.c
--- a/tools/xenstat/xentop/xentop.c     Thu Sep 27 16:29:43 2007 -0600
+++ b/tools/xenstat/xentop/xentop.c     Tue Oct 02 16:53:10 2007 +0900
@@ -28,6 +28,7 @@
 #include <sys/time.h>
 #include <time.h>
 #include <unistd.h>
+#include <signal.h>
 #if defined(__linux__)
 #include <linux/kdev_t.h>
 #endif
@@ -1011,6 +1012,12 @@ static void top(void)
        free(domains);
 }

+static volatile int sigout_flag = 0;
+
+void a_sig_handler(int sig) {
+       sigout_flag = 1;
+}
+
 int main(int argc, char **argv)
 {
        int opt, optind = 0;
@@ -1102,6 +1109,14 @@ int main(int argc, char **argv)
                        ch = getch();
                } while (handle_key(ch));
        } else {
+                       struct sigaction sa = {
+                               .sa_handler = a_sig_handler,
+                               .sa_flags = 0
+                       };
+                       sigemptyset(&sa.sa_mask);
+                       sigaction(SIGINT, &sa, NULL);
+                       sigaction(SIGTERM, &sa, NULL);
+
                        do {
                                gettimeofday(&curtime, NULL);
                                top();
@@ -1109,7 +1124,7 @@ int main(int argc, char **argv)
                                if ((!loop) && !(--iterations))
                                        break;
                                sleep(delay);
-                       } while (1);
+                       } while (sigout_flag == 0);
        }

        /* Cleanup occurs in cleanup(), so no work to do here. */


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.