""" 操作系统信号和 Windows 控制台事件处理。 """ import sys import signal from foundation.observability.logger.loggering import server_logger def setup_signal_handlers(shutdown_callback): """注册信号处理器,shutdown_callback 会在收到终止信号时调用。""" def handler(signum, frame): server_logger.info(f"收到信号 {signum},正在停止服务...") shutdown_callback() sys.exit(0) try: signal.signal(signal.SIGINT, handler) signal.signal(signal.SIGTERM, handler) except AttributeError: pass if sys.platform == 'win32': _setup_windows_handler(shutdown_callback) def _setup_windows_handler(shutdown_callback): try: import win32api def win32_handler(dwCtrlType): CTRL_C_EVENT = 0 CTRL_BREAK_EVENT = 1 CTRL_CLOSE_EVENT = 2 CTRL_SHUTDOWN_EVENT = 6 if dwCtrlType in (CTRL_C_EVENT, CTRL_BREAK_EVENT, CTRL_CLOSE_EVENT, CTRL_SHUTDOWN_EVENT): server_logger.info(f"收到Windows控制台事件 {dwCtrlType},正在停止服务...") shutdown_callback() sys.exit(0) return False win32api.SetConsoleCtrlHandler(win32_handler, True) except (ImportError, AttributeError) as e: server_logger.debug(f"Windows控制台事件处理不可用: {e}")