Chromium Code Reviews| Index: scripts/slave/recipe_modules/goma/resources/cloudtail_utils.py |
| diff --git a/scripts/slave/recipe_modules/goma/resources/cloudtail_utils.py b/scripts/slave/recipe_modules/goma/resources/cloudtail_utils.py |
| index 79f20dc1edd7c1ee81c9d20086e9b363e61c5bb5..958a0399119f43ff460d2ef686a333524a816faa 100644 |
| --- a/scripts/slave/recipe_modules/goma/resources/cloudtail_utils.py |
| +++ b/scripts/slave/recipe_modules/goma/resources/cloudtail_utils.py |
| @@ -9,6 +9,7 @@ import os |
| import signal |
| import subprocess |
| import sys |
| +import time |
| from slave import goma_utils |
| @@ -24,6 +25,30 @@ def start_cloudtail(args): |
| with open(args.pid_file, 'w') as f: |
| f.write(str(proc.pid)) |
| +def is_running_posix(pid): |
| + try: |
|
ukai
2016/10/04 04:58:44
docstring?
tikuta
2016/10/04 05:18:08
Done.
|
| + os.kill(pid, signal.SIGINT) |
|
ukai
2016/10/04 04:58:44
os.kill(pid, 0) ?
tikuta
2016/10/04 05:18:08
Done.
|
| + except OSError as e: |
| + if e.errno == errno.ESRCH or e.errno == errno.EPERM: |
| + return False |
| + os.kill(pid, signal.SIGKILL) |
| + raise e |
| + return True |
| + |
| +def wait_termination(pid): |
|
ukai
2016/10/04 04:58:44
docstring?
tikuta
2016/10/04 05:18:08
Done.
|
| + os.kill(pid, signal.SIGINT) |
|
ukai
2016/10/04 04:58:44
no exception is expected here?
tikuta
2016/10/04 05:18:08
If exception occurs, I kill cloudtail and raise sa
|
| + |
| + if os.name == 'nt': |
| + os.waitpid(pid, 0) |
| + else: |
| + for i in range(10): |
| + if not is_running_posix(pid): |
| + break |
| + time.sleep(1) |
| + |
| + if is_running_posix(pid): |
| + os.kill(pid, signal.SIGKILL) |
| + |
| def main(): |
| parser = argparse.ArgumentParser( |
| description='cloudtail utility for goma recipe module.') |
| @@ -52,7 +77,7 @@ def main(): |
| with open(args.killed_pid_file) as f: |
| # cloudtail flushes log and terminates |
| # within 5 seconds when it recieves SIGINT. |
| - os.kill(int(f.read()), signal.SIGINT) |
| + wait_termination(int(f.read())) |
| if '__main__' == __name__: |
| sys.exit(main()) |