summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/buildstream/_signals.py6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/buildstream/_signals.py b/src/buildstream/_signals.py
index 425a57239..969789e92 100644
--- a/src/buildstream/_signals.py
+++ b/src/buildstream/_signals.py
@@ -43,10 +43,14 @@ suspendable_stack = deque() # type: MutableSequence[Callable]
# Per process SIGTERM handler
def terminator_handler(signal_, frame):
+ exit_code = -1
+
while terminator_stack:
terminator_ = terminator_stack.pop()
try:
terminator_()
+ except SystemExit as e:
+ exit_code = e.code or 0
except: # noqa pylint: disable=bare-except
# Ensure we print something if there's an exception raised when
# processing the handlers. Note that the default exception
@@ -62,7 +66,7 @@ def terminator_handler(signal_, frame):
# Use special exit here, terminate immediately, recommended
# for precisely this situation where child processes are teminated.
- os._exit(-1)
+ os._exit(exit_code)
# terminator()