diff mbox

[v2,03/17] tools/kvm_stat: handle SIGINT in log and batch modes

Message ID 20170310124016.96319-4-raspl@linux.vnet.ibm.com (mailing list archive)
State New, archived
Headers show

Commit Message

Stefan Raspl March 10, 2017, 12:40 p.m. UTC
SIGINT causes ugly unhandled exceptions in log and batch mode, which we
prevent by catching the exceptions accordingly.

Signed-off-by: Stefan Raspl <raspl@linux.vnet.ibm.com>
Reviewed-by: Marc Hartmayer <mhartmay@linux.vnet.ibm.com>
---
 tools/kvm/kvm_stat/kvm_stat | 28 +++++++++++++++++-----------
 1 file changed, 17 insertions(+), 11 deletions(-)

Comments

Radim Krčmář March 15, 2017, 9:54 p.m. UTC | #1
2017-03-10 13:40+0100, Stefan Raspl:
> SIGINT causes ugly unhandled exceptions in log and batch mode, which we
> prevent by catching the exceptions accordingly.
> 
> Signed-off-by: Stefan Raspl <raspl@linux.vnet.ibm.com>
> Reviewed-by: Marc Hartmayer <mhartmay@linux.vnet.ibm.com>
> ---

The interactive mode also gets

  Exception KeyboardInterrupt in <bound method Event.__del__ of <__main__.Event object at 0x7f09a3c2cd50>> ignored

If you press ^C twice fast :)

>  tools/kvm/kvm_stat/kvm_stat | 28 +++++++++++++++++-----------
>  1 file changed, 17 insertions(+), 11 deletions(-)
> 
> diff --git a/tools/kvm/kvm_stat/kvm_stat b/tools/kvm/kvm_stat/kvm_stat
> index ef47ad7..14536c0 100755
> --- a/tools/kvm/kvm_stat/kvm_stat
> +++ b/tools/kvm/kvm_stat/kvm_stat
> @@ -969,12 +969,15 @@ class Tui(object):
>  
>  def batch(stats):
>      """Prints statistics in a key, value format."""
> -    s = stats.get()
> -    time.sleep(1)
> -    s = stats.get()
> -    for key in sorted(s.keys()):
> -        values = s[key]
> -        print '%-42s%10d%10d' % (key, values[0], values[1])
> +    try:
> +        s = stats.get()
> +        time.sleep(1)
> +        s = stats.get()
> +        for key in sorted(s.keys()):
> +            values = s[key]
> +            print '%-42s%10d%10d' % (key, values[0], values[1])
> +    except KeyboardInterrupt:
> +        pass
>  
>  def log(stats):
>      """Prints statistics as reiterating key block, multiple value blocks."""
> @@ -991,11 +994,14 @@ def log(stats):
>      line = 0
>      banner_repeat = 20
>      while True:
> -        time.sleep(1)
> -        if line % banner_repeat == 0:
> -            banner()
> -        statline()
> -        line += 1
> +        try:
> +            time.sleep(1)
> +            if line % banner_repeat == 0:
> +                banner()
> +            statline()
> +            line += 1
> +        except KeyboardInterrupt:
> +            break
>  
>  def get_options():
>      """Returns processed program arguments."""
> -- 
> 2.8.4
>
diff mbox

Patch

diff --git a/tools/kvm/kvm_stat/kvm_stat b/tools/kvm/kvm_stat/kvm_stat
index ef47ad7..14536c0 100755
--- a/tools/kvm/kvm_stat/kvm_stat
+++ b/tools/kvm/kvm_stat/kvm_stat
@@ -969,12 +969,15 @@  class Tui(object):
 
 def batch(stats):
     """Prints statistics in a key, value format."""
-    s = stats.get()
-    time.sleep(1)
-    s = stats.get()
-    for key in sorted(s.keys()):
-        values = s[key]
-        print '%-42s%10d%10d' % (key, values[0], values[1])
+    try:
+        s = stats.get()
+        time.sleep(1)
+        s = stats.get()
+        for key in sorted(s.keys()):
+            values = s[key]
+            print '%-42s%10d%10d' % (key, values[0], values[1])
+    except KeyboardInterrupt:
+        pass
 
 def log(stats):
     """Prints statistics as reiterating key block, multiple value blocks."""
@@ -991,11 +994,14 @@  def log(stats):
     line = 0
     banner_repeat = 20
     while True:
-        time.sleep(1)
-        if line % banner_repeat == 0:
-            banner()
-        statline()
-        line += 1
+        try:
+            time.sleep(1)
+            if line % banner_repeat == 0:
+                banner()
+            statline()
+            line += 1
+        except KeyboardInterrupt:
+            break
 
 def get_options():
     """Returns processed program arguments."""