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 subprocess
import sys
import time
from platypush.process import ControllableProcess
@ -28,18 +29,31 @@ class ApplicationProcess(ControllableProcess):
def main(self):
self.logger.info('Starting application...')
app = None
try:
with subprocess.Popen(
[sys.executable, '-m', 'platypush.app', *self.args],
stdin=sys.stdin,
stdout=sys.stdout,
stderr=sys.stderr,
) as app:
try:
app.wait()
except KeyboardInterrupt:
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):
try:
with open(self.pidfile, 'r') as f: