diff --git a/hatchet_sdk/worker/action_listener_process.py b/hatchet_sdk/worker/action_listener_process.py index 08508607..e71d9d7b 100644 --- a/hatchet_sdk/worker/action_listener_process.py +++ b/hatchet_sdk/worker/action_listener_process.py @@ -1,3 +1,4 @@ +import os import asyncio import logging import signal @@ -73,8 +74,11 @@ def __post_init__(self): loop = asyncio.get_event_loop() loop.add_signal_handler(signal.SIGINT, noop_handler) loop.add_signal_handler(signal.SIGTERM, noop_handler) + + sig_force_quit = "SIGBREAK" if os.name == "nt" else "SIGQUIT" # Windows doesn't have SIGQUIT + sig_force_quit_signal = getattr(signal, sig_force_quit, None) loop.add_signal_handler( - signal.SIGQUIT, lambda: asyncio.create_task(self.exit_gracefully()) + sig_force_quit_signal, lambda: asyncio.create_task(self.exit_gracefully()) ) async def start(self, retry_attempt=0): diff --git a/hatchet_sdk/worker/worker.py b/hatchet_sdk/worker/worker.py index b6ec1531..5c75faf3 100644 --- a/hatchet_sdk/worker/worker.py +++ b/hatchet_sdk/worker/worker.py @@ -314,7 +314,10 @@ async def _check_listener_health(self) -> None: def _setup_signal_handlers(self) -> None: signal.signal(signal.SIGTERM, self._handle_exit_signal) signal.signal(signal.SIGINT, self._handle_exit_signal) - signal.signal(signal.SIGQUIT, self._handle_force_quit_signal) + + sig_force_quit = "SIGBREAK" if os.name == "nt" else "SIGQUIT" # Windows doesn't have SIGQUIT + sig_force_quit_signal = getattr(signal, sig_force_quit, None) + signal.signal(sig_force_quit_signal, self._handle_force_quit_signal) def _handle_exit_signal(self, signum: int, frame: FrameType | None) -> None: sig_name = "SIGTERM" if signum == signal.SIGTERM else "SIGINT"