From 928d66b094eb528f98666c15f4ee37c5c5863244 Mon Sep 17 00:00:00 2001 From: Benjamin Schubert Date: Fri, 8 Nov 2019 14:27:57 +0000 Subject: job.py: handle SIGTERM gracefully This allows showing a nice info to the user and stop showing that the return code was an unexpected 255. --- src/buildstream/_scheduler/jobs/job.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src') diff --git a/src/buildstream/_scheduler/jobs/job.py b/src/buildstream/_scheduler/jobs/job.py index 00de9053c..9570fea62 100644 --- a/src/buildstream/_scheduler/jobs/job.py +++ b/src/buildstream/_scheduler/jobs/job.py @@ -45,6 +45,7 @@ class _ReturnCode(FastEnum): FAIL = 1 PERM_FAIL = 2 SKIPPED = 3 + TERMINATED = 4 # JobStatus: @@ -454,6 +455,13 @@ class Job(): elif returncode == _ReturnCode.SKIPPED: status = JobStatus.SKIPPED elif returncode in (_ReturnCode.FAIL, _ReturnCode.PERM_FAIL): + status = JobStatus.FAIL + elif returncode == _ReturnCode.TERMINATED: + if self._terminated: + self.message(MessageType.INFO, "Process was terminated") + else: + self.message(MessageType.ERROR, "Process was terminated unexpectedly") + status = JobStatus.FAIL else: status = JobStatus.FAIL @@ -714,6 +722,12 @@ class ChildJob(): with _signals.suspendable(stop_time, resume_time), \ self._messenger.recorded_messages(self._logfile, self._logdir) as filename: + # Graciously handle sigterms. + def handle_sigterm(_signum, _sigframe): + self._child_shutdown(_ReturnCode.TERMINATED) + + signal.signal(signal.SIGTERM, handle_sigterm) + self.message(MessageType.START, self.action_name, logfile=filename) try: -- cgit v1.2.1