From f76f77e96405cca5b5fad6f1351b42b97eabb7ca Mon Sep 17 00:00:00 2001 From: Alexander Kukushkin Date: Thu, 28 May 2015 12:25:49 +0200 Subject: [PATCH] Ignore SIGCHLD instead of processing it. This way time.sleep wont be interrupted when some external process is finished and terminated childs would be reaped automatically. --- governor.py | 13 +------------ tests/test_governor.py | 12 +----------- 2 files changed, 2 insertions(+), 23 deletions(-) diff --git a/governor.py b/governor.py index 85cd28e0..58ca26ec 100755 --- a/governor.py +++ b/governor.py @@ -17,17 +17,6 @@ def sigterm_handler(signo, stack_frame): sys.exit() -# handle SIGCHILD, since we are the equivalent of the INIT process -def sigchld_handler(signo, stack_frame): - try: - while True: - ret = os.waitpid(-1, os.WNOHANG) - if ret == (0, 0): - break - except OSError: - pass - - class Governor: def __init__(self, config): @@ -77,8 +66,8 @@ class Governor: def main(): logging.basicConfig(format='%(asctime)s %(levelname)s: %(message)s', level=logging.INFO) + signal.signal(signal.SIGCHLD, signal.SIG_IGN) signal.signal(signal.SIGTERM, sigterm_handler) - signal.signal(signal.SIGCHLD, sigchld_handler) if len(sys.argv) < 2 or not os.path.isfile(sys.argv[1]): print('Usage: {} config.yml'.format(sys.argv[0])) diff --git a/tests/test_governor.py b/tests/test_governor.py index 941d6d45..acc44de4 100644 --- a/tests/test_governor.py +++ b/tests/test_governor.py @@ -1,4 +1,3 @@ -import os import psycopg2 import requests import subprocess @@ -7,7 +6,7 @@ import time import unittest import yaml -from governor import Governor, main, sigchld_handler, sigterm_handler +from governor import Governor, main, sigterm_handler from test_ha import true, false from test_postgresql import Postgresql, subprocess_call, psycopg2_connect from test_etcd import requests_get, requests_put, requests_delete @@ -22,10 +21,6 @@ def nop(*args, **kwargs): pass -def os_waitpid(a, b): - return (0, 0) - - def time_sleep(_): raise Exception() @@ -88,8 +83,3 @@ class TestGovernor(unittest.TestCase): time.sleep = time_sleep g.postgresql.sync_from_leader = false self.assertRaises(Exception, g.initialize) - - def test_sigchld_handler(self): - sigchld_handler(None, None) - os.waitpid = os_waitpid - sigchld_handler(None, None)