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..6945bb9f93e7d2e2b614bc7370740e7e73155223 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,15 @@ def start_cloudtail(args): |
| with open(args.pid_file, 'w') as f: |
| f.write(str(proc.pid)) |
| +def is_running_posix(pid): |
| + try: |
| + os.kill(pid, 0) |
| + except OSError as e: |
| + if e.errno == errno.ESRCH: |
|
ukai
2016/10/03 02:52:52
kill may get errno.EPERM and I think we should ret
Vadim Sh.
2016/10/03 19:07:06
+1 for EPERM handling and returning false
tikuta
2016/10/04 03:45:26
Done.
|
| + return False |
| + raise e |
|
Yoshisato Yanagisawa
2016/10/03 04:49:05
So, in this case, we do not guarantee cloud tail d
tikuta
2016/10/04 03:45:25
I send SIGKILL
|
| + return True |
| + |
| def main(): |
| parser = argparse.ArgumentParser( |
| description='cloudtail utility for goma recipe module.') |
| @@ -52,7 +62,16 @@ 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) |
| + pid = int(f.read()) |
| + os.kill(pid, signal.SIGINT) |
| + if os.name == 'nt': |
|
ukai
2016/10/03 02:52:52
factor out a func to wait for pid?
Vadim Sh.
2016/10/03 19:07:06
+1
tikuta
2016/10/04 03:45:26
Done.
|
| + os.waitpid(pid, 0) |
| + else: |
| + while True: |
|
ukai
2016/10/03 02:52:52
might be better to abandon if it tried >5 sec or s
Vadim Sh.
2016/10/03 19:07:06
+1
also nit
while is_running_posix(pid):
time.
tikuta
2016/10/04 03:45:26
Done.
|
| + if is_running_posix(pid): |
| + time.sleep(1) |
| + else: |
| + break |
| if '__main__' == __name__: |
| sys.exit(main()) |