From ad8b1ca2fd69e487ac2a969a78e6defbfd5bb245 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 27 Feb 2026 00:04:29 +0000 Subject: [PATCH 1/3] Initial plan From bafc8e87a3db962878b60e1386383d8b192cd95b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 27 Feb 2026 00:08:14 +0000 Subject: [PATCH 2/3] Handle KeyboardInterrupt in run_app to allow single Ctrl+C shutdown Co-authored-by: lstein <111189+lstein@users.noreply.github.com> --- invokeai/app/run_app.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/invokeai/app/run_app.py b/invokeai/app/run_app.py index 76c2ffdad51..d7dde35da65 100644 --- a/invokeai/app/run_app.py +++ b/invokeai/app/run_app.py @@ -100,4 +100,7 @@ def run_app() -> None: for hdlr in logger.handlers: uvicorn_logger.addHandler(hdlr) - loop.run_until_complete(server.serve()) + try: + loop.run_until_complete(server.serve()) + except KeyboardInterrupt: + logger.info("InvokeAI shutting down...") From 1f0f476a59294b81f8b0788091a1840cf15a2c10 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 27 Feb 2026 00:22:50 +0000 Subject: [PATCH 3/3] Force os._exit(0) on KeyboardInterrupt to avoid hanging on background threads Co-authored-by: lstein <111189+lstein@users.noreply.github.com> --- invokeai/app/run_app.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/invokeai/app/run_app.py b/invokeai/app/run_app.py index d7dde35da65..e9be3032a44 100644 --- a/invokeai/app/run_app.py +++ b/invokeai/app/run_app.py @@ -9,6 +9,8 @@ def get_app(): def run_app() -> None: """The main entrypoint for the app.""" + import os + from invokeai.frontend.cli.arg_parser import InvokeAIArgs # Parse the CLI arguments before doing anything else, which ensures CLI args correctly override settings from other @@ -104,3 +106,5 @@ def run_app() -> None: loop.run_until_complete(server.serve()) except KeyboardInterrupt: logger.info("InvokeAI shutting down...") + # Force exit to avoid hanging on non-daemon background threads (e.g. model install service). + os._exit(0)