diff options
Diffstat (limited to 'testsuite/timeout/timeout.py')
-rw-r--r-- | testsuite/timeout/timeout.py | 53 |
1 files changed, 29 insertions, 24 deletions
diff --git a/testsuite/timeout/timeout.py b/testsuite/timeout/timeout.py index f3468ad9fb..d6bc0cf326 100644 --- a/testsuite/timeout/timeout.py +++ b/testsuite/timeout/timeout.py @@ -1,33 +1,33 @@ #!/usr/bin/env python -try: +import errno +import os +import signal +import sys +import time - import errno - import os - import signal - import sys - import time +secs = int(sys.argv[1]) +cmd = sys.argv[2] - secs = int(sys.argv[1]) - cmd = sys.argv[2] +def killProcess(pid): + os.killpg(pid, signal.SIGKILL) + for x in range(10): + try: + time.sleep(0.3) + r = os.waitpid(pid, os.WNOHANG) + if r == (0, 0): + os.killpg(pid, signal.SIGKILL) + else: + return + except OSError as e: + if e.errno == errno.ECHILD: + return + else: + raise e - def killProcess(pid): - os.killpg(pid, signal.SIGKILL) - for x in range(10): - try: - time.sleep(0.3) - r = os.waitpid(pid, os.WNOHANG) - if r == (0, 0): - os.killpg(pid, signal.SIGKILL) - else: - return - except OSError as e: - if e.errno == errno.ECHILD: - return - else: - raise e +pid = os.fork() - pid = os.fork() +try: if pid == 0: # child os.setpgrp() @@ -50,7 +50,12 @@ try: sys.exit(99) # unexpected except KeyboardInterrupt: + killProcess(pid) sys.exit(98) +except SystemExit: + raise except: + print("Unexpected error:", sys.exc_info()[0]) + killProcess(pid) raise |