diff -up iotop-0.6/iotop/ui.py.noendcurses iotop-0.6/iotop/ui.py --- iotop-0.6/iotop/ui.py.noendcurses 2014-12-03 17:50:38.941430261 +0100 +++ iotop-0.6/iotop/ui.py 2014-12-03 17:51:40.108064465 +0100 @@ -488,10 +488,14 @@ class IOTopUI(object): self.win.refresh() def run_iotop_window(win, options): + global terminating + terminating = False if options.batch: signal.signal(signal.SIGPIPE, signal.SIG_DFL) else: def clean_exit(*args, **kwargs): + global terminating + terminating = True sys.exit(0) signal.signal(signal.SIGINT, clean_exit) signal.signal(signal.SIGTERM, clean_exit) @@ -499,6 +503,7 @@ def run_iotop_window(win, options): process_list = ProcessList(taskstats_connection, options) ui = IOTopUI(win, process_list, options) ui.run() + terminating = True def run_iotop(options): try: @@ -520,6 +525,17 @@ Please do not file bugs on iotop about t sys.exit(1) else: raise + except curses.error as e: + stre = str(e) + if terminating and stre.find('ERR')>=0 and ( + stre.find('nocbreak()')>=0 or stre.find('endwin()')>=0 + ): + pass + # endwin and nocbreak can cause error (and raise hard to catch + # exception) if iotop was running in the terminal and that + # terminal got closed while iotop was still running + else: + raise # # Profiling