From a59f2a5a6358f0e6f51970d01126fe088edd014b Mon Sep 17 00:00:00 2001 From: "Egor.Eliseev" Date: Fri, 13 Dec 2024 11:07:01 +0200 Subject: [PATCH 1/2] Add check to determine if a console window is present. It is a sufficient flag whether CTRL_C_EVENT would be ignored by a child process or not. --- uvicorn/supervisors/basereload.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/uvicorn/supervisors/basereload.py b/uvicorn/supervisors/basereload.py index f07ca3912..b9d120471 100644 --- a/uvicorn/supervisors/basereload.py +++ b/uvicorn/supervisors/basereload.py @@ -5,6 +5,7 @@ import signal import sys import threading +import ctypes from pathlib import Path from socket import socket from types import FrameType @@ -88,7 +89,10 @@ def restart(self) -> None: if sys.platform == "win32": # pragma: py-not-win32 self.is_restarting = True assert self.process.pid is not None - os.kill(self.process.pid, signal.CTRL_C_EVENT) + if ctypes.windll.kernel32.GetConsoleWindow() != 0: + os.kill(self.process.pid, signal.CTRL_C_EVENT) + else: + self.process.terminate() else: # pragma: py-win32 self.process.terminate() self.process.join() From 1886e44ef14f5778d7ce0cd151a98f98f77165a1 Mon Sep 17 00:00:00 2001 From: "Egor.Eliseev" Date: Fri, 13 Dec 2024 11:48:30 +0200 Subject: [PATCH 2/2] fixup! Add check to determine if a console window is present. --- uvicorn/supervisors/basereload.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uvicorn/supervisors/basereload.py b/uvicorn/supervisors/basereload.py index b9d120471..8c8bb6d65 100644 --- a/uvicorn/supervisors/basereload.py +++ b/uvicorn/supervisors/basereload.py @@ -1,11 +1,11 @@ from __future__ import annotations +import ctypes import logging import os import signal import sys import threading -import ctypes from pathlib import Path from socket import socket from types import FrameType