--- src/gtk-redshift/statusicon.py.orig 2011-04-05 11:03:20.888460529 +0200 +++ src/gtk-redshift/statusicon.py 2011-04-05 11:05:10.765086886 +0200 @@ -40,6 +40,18 @@ import utils +def create_janitor(process): + def janitor(signum, frame): + try: + process.terminate() + process.wait() + except OSError: + pass # already dead. + finally: + sys.exit(-1) + return janitor + + def run(): # Internationalisation gettext.bindtextdomain('redshift', defs.LOCALEDIR) @@ -127,8 +139,9 @@ def child_cb(pid, cond, data=None): sys.exit(-1) - # Add watch on child process + # Add watch on child process, register cleanup function glib.child_watch_add(process.pid, child_cb) + signal.signal(signal.SIGTERM, create_janitor(process)) # Run main loop gtk.main() @@ -136,8 +149,3 @@ except KeyboardInterrupt: # Ignore user interruption pass - - finally: - # Always terminate redshift - process.terminate() - process.wait()