aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Teichmann <daniel.teichmann@das-netzwerkteam.de>2021-06-28 12:14:55 +0200
committerDaniel Teichmann <daniel.teichmann@das-netzwerkteam.de>2021-06-28 12:14:55 +0200
commit7a8879367414be332ad0946c2b37348d5f4fef9d (patch)
tree718122bf216088cc737eea2198f264ee83c7b8f6
parentd81082efdea8b603914f04b6690d11c28fc8fcf7 (diff)
downloadRWA.Support.SessionService-7a8879367414be332ad0946c2b37348d5f4fef9d.tar.gz
RWA.Support.SessionService-7a8879367414be332ad0946c2b37348d5f4fef9d.tar.bz2
RWA.Support.SessionService-7a8879367414be332ad0946c2b37348d5f4fef9d.zip
Add a new signal handler for SIGQUIT. SIGQUIT signals the service to stop ALL sessions.
How to send SIGQUIT via a terminal emulator: stty -a | grep intr
-rwxr-xr-xrwa/support/sessionservice/service.py18
1 files changed, 14 insertions, 4 deletions
diff --git a/rwa/support/sessionservice/service.py b/rwa/support/sessionservice/service.py
index 3e9900d..6988beb 100755
--- a/rwa/support/sessionservice/service.py
+++ b/rwa/support/sessionservice/service.py
@@ -251,11 +251,16 @@ class RWASupportSessionService(dbus.service.Object):
return False
def _stop_all(self):
- """Stop all sessions and this daemon."""
- logging.info("Stop all sessions and exit service.")
+ """Stop all sessions"""
+ logging.info("Stop all sessions.")
for session in list(self.sessions.values()):
session.stop()
del self.sessions[session.pid]
+
+ def _stop_daemon(self):
+ """Stop all sessions and this daemon."""
+ logging.info("Shut down session service.")
+ self._stop_all()
self.trigger_service.shutdown()
self.loop.quit()
@@ -317,11 +322,16 @@ def main(mockup, once):
loop = GLib.MainLoop()
service_object = RWASupportSessionService(loop, mockup, once)
- def signal_handler(sig, frame):
+ def sigint_handler(sig, frame):
logging.info("Service was terminated.")
+ service_object._stop_daemon()
+
+ def sigquit_handler(sig, frame):
+ logging.info("Session was terminated.")
service_object._stop_all()
- signal.signal(signal.SIGINT, signal_handler)
+ signal.signal(signal.SIGINT, sigint_handler)
+ signal.signal(signal.SIGQUIT, sigquit_handler)
loop.run()