From 3973c476c47cf5f760281b6c9e9bec57aa72c04e Mon Sep 17 00:00:00 2001 From: Mohammad Kazemi Date: Mon, 24 Feb 2025 10:40:42 +0330 Subject: [PATCH] catch SIGINT signal properly in 'up' function and call compose 'down' function for a graceful shutdown Signed-off-by: Mohammad Kazemi --- podman_compose.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/podman_compose.py b/podman_compose.py index 8920065..32f8dfe 100755 --- a/podman_compose.py +++ b/podman_compose.py @@ -2778,9 +2778,17 @@ async def compose_up(compose: PodmanCompose, args): max_service_length = curr_length if curr_length > max_service_length else max_service_length tasks = set() + + async def handle_sigint(): + log.info("Caught SIGINT, shutting down...") + down_args = argparse.Namespace(**dict(args.__dict__, volumes=False)) + await compose.commands["down"](compose, down_args) + for task in tasks: + task.cancel() + if sys.platform != 'win32': loop = asyncio.get_event_loop() - loop.add_signal_handler(signal.SIGINT, lambda: [t.cancel("User exit") for t in tasks]) + loop.add_signal_handler(signal.SIGINT, lambda: asyncio.create_task(handle_sigint())) for i, cnt in enumerate(compose.containers): # Add colored service prefix to output by piping output through sed