about summary refs log tree commit diff
path: root/gn_libs/jobs/launcher.py
diff options
context:
space:
mode:
Diffstat (limited to 'gn_libs/jobs/launcher.py')
-rw-r--r--gn_libs/jobs/launcher.py12
1 files changed, 10 insertions, 2 deletions
diff --git a/gn_libs/jobs/launcher.py b/gn_libs/jobs/launcher.py
index d565f9e..f915b81 100644
--- a/gn_libs/jobs/launcher.py
+++ b/gn_libs/jobs/launcher.py
@@ -3,6 +3,7 @@ import os
 import sys
 import time
 import shlex
+import signal
 import logging
 import argparse
 import traceback
@@ -34,8 +35,13 @@ def run_job(conn, job, outputs_directory: Path):
                   encoding="utf-8",
                   stdout=outfile,
                   stderr=errfile) as process):
+            jobs.update_metadata(conn, job_id, "status", "running")
             while process.poll() is None:
-                jobs.update_metadata(conn, job_id, "status", "running")
+                _job = jobs.job(conn, job_id, True)
+                if bool(_job["metadata"].get("hangup_request")):
+                    process.send_signal(signal.SIGHUP)
+                    jobs.update_metadata(conn, job_id, "status", "stopped")
+                    break;
                 jobs.push_to_stream(conn, job_id, "stdout", stdout_in.read())
                 jobs.push_to_stream(conn, job_id, "stderr", stderr_in.read())
                 time.sleep(1)
@@ -51,7 +57,9 @@ def run_job(conn, job, outputs_directory: Path):
         if exit_status == 0:
             jobs.update_metadata(conn, job_id, "status", "completed")
         else:
-            jobs.update_metadata(conn, job_id, "status", "error")
+            _job = jobs.job(conn, job_id, True)
+            if _job["metadata"]["status"] != "stopped":
+                jobs.update_metadata(conn, job_id, "status", "error")
 
         logger.info("exiting job manager/launcher")
         return exit_status