Don't even bother trying to kill stray child processes.

When we change our process group id we don't get keyboard interrupt
signals passed if our parent is a bash script.
This commit is contained in:
Jan Harkes 2016-05-23 23:00:46 -04:00
parent 712c51e283
commit dc8e55fb8b

View file

@ -4,7 +4,6 @@ from __future__ import print_function
import argparse import argparse
import os import os
import platform import platform
import signal
import subprocess import subprocess
import sys import sys
import threading import threading
@ -334,29 +333,6 @@ def try_to_restart():
except AssertionError: except AssertionError:
sys.stderr.write("Failed to count non-daemonic threads.\n") sys.stderr.write("Failed to count non-daemonic threads.\n")
# Send terminate signal to all processes in our process group which
# should be any children that have not themselves changed the process
# group id. Don't bother if couldn't even call setpgid.
if hasattr(os, 'setpgid'):
sys.stderr.write("Signalling child processes to terminate...\n")
os.kill(0, signal.SIGTERM)
# wait for child processes to terminate
try:
while True:
time.sleep(1)
if os.waitpid(0, os.WNOHANG) == (0, 0):
break
except OSError:
pass
elif os.name == 'nt':
# Maybe one of the following will work, but how do we indicate which
# processes are our children if there is no process group?
# os.kill(0, signal.CTRL_C_EVENT)
# os.kill(0, signal.CTRL_BREAK_EVENT)
pass
# Try to not leave behind open filedescriptors with the emphasis on try. # Try to not leave behind open filedescriptors with the emphasis on try.
try: try:
max_fd = os.sysconf("SC_OPEN_MAX") max_fd = os.sysconf("SC_OPEN_MAX")
@ -408,13 +384,6 @@ def main():
if args.pid_file: if args.pid_file:
write_pid(args.pid_file) write_pid(args.pid_file)
# Create new process group if we can
if hasattr(os, 'setpgid'):
try:
os.setpgid(0, 0)
except PermissionError:
pass
exit_code = setup_and_run_hass(config_dir, args) exit_code = setup_and_run_hass(config_dir, args)
if exit_code == RESTART_EXIT_CODE and not args.runner: if exit_code == RESTART_EXIT_CODE and not args.runner:
try_to_restart() try_to_restart()