From 7e304001b62a0d6c68c06c8c9283b4e55a233d32 Mon Sep 17 00:00:00 2001 From: Smaarn Date: Sun, 24 May 2020 11:45:28 +0200 Subject: [PATCH] Rework on child process management. When receiving the SIGTERM signal, swallow it and terminate latest created child process Catch ChildProcessError (occurs when child process is terminated by the current python script on mac os x) --- bazarr.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/bazarr.py b/bazarr.py index 594154e13..a3e17189a 100644 --- a/bazarr.py +++ b/bazarr.py @@ -2,6 +2,7 @@ import os import platform +import signal import subprocess import sys import time @@ -37,11 +38,18 @@ def end_child_process(ep): except: pass +def terminate_child_process(ep): + try: + ep.terminate() + except: + pass + def start_bazarr(): script = [sys.executable, "-u", os.path.normcase(os.path.join(dir_name, 'bazarr', 'main.py'))] + sys.argv[1:] ep = subprocess.Popen(script, stdout=None, stderr=None, stdin=subprocess.DEVNULL) atexit.register(end_child_process, ep=ep) + signal.signal(signal.SIGTERM, lambda signal_no, frame: terminate_child_process(ep)) def check_status(): @@ -92,6 +100,6 @@ if __name__ == '__main__': else: os.wait() time.sleep(1) - except (KeyboardInterrupt, SystemExit): + except (KeyboardInterrupt, SystemExit, ChildProcessError): print('Bazarr exited.') sys.exit(0)