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()) |