Ensure that the application always terminates on Ctrl+C.

This commit is contained in:
Fabio Manganiello 2023-10-22 02:29:55 +02:00
parent f75a2159c7
commit 4d582bb6bc
Signed by: blacklight
GPG key ID: D90FBA7F76362774

View file

@ -3,6 +3,7 @@ import os
import signal import signal
import subprocess import subprocess
import sys import sys
import time
from platypush.process import ControllableProcess from platypush.process import ControllableProcess
@ -28,17 +29,30 @@ class ApplicationProcess(ControllableProcess):
def main(self): def main(self):
self.logger.info('Starting application...') self.logger.info('Starting application...')
app = None
with subprocess.Popen( try:
[sys.executable, '-m', 'platypush.app', *self.args], with subprocess.Popen(
stdin=sys.stdin, [sys.executable, '-m', 'platypush.app', *self.args],
stdout=sys.stdout, stdin=sys.stdin,
stderr=sys.stderr, stdout=sys.stdout,
) as app: stderr=sys.stderr,
try: ) as app:
app.wait() app.wait()
except KeyboardInterrupt: except KeyboardInterrupt:
pass pass
if app and app.poll() is None:
app.terminate()
wait_start = time.time()
while app and app.poll() is None:
if time.time() - wait_start > 5:
self.logger.warning('Application did not terminate, killing it')
app.kill()
break
time.sleep(0.1)
def on_stop(self): def on_stop(self):
try: try: