| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- """
- 操作系统信号和 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}")
|