信号处理
概述
信号对照表
信号
值
发送方式
功能
状态
实现细节
main.py - 统一信号处理
from xlib.util import stackdump, mem_top
def signal_handler_shutdown(signum, frame):
"""优雅退出 (SIGINT=2, SIGTERM=15)"""
global _server
logger.info("Received signal %s (%s), shutting down gracefully...", sig_name, signum)
# Step 1: 发送停止信号给所有组件
signals.signal_server_stop.send("main")
# Step 2: 停止 HTTP Server
if _server:
_server.stop()
logger.info("Server stopped successfully")
sys.exit(0)
def signal_handler_stackdump(signum, frame):
"""输出堆栈信息 (SIGUSR1=10)"""
logger.info("Stack dump requested (SIGUSR1)")
stackdump.stackdump()
def signal_handler_mem(signum, frame):
"""输出内存信息 (SIGUSR2=12)"""
logger.info("Memory info requested (SIGUSR2)")
mem_info = mem_top.mem_top(limit=20, width=200)
logger.info("Memory info:\n%s", mem_info)
if __name__ == '__main__':
# 注册信号处理
signal.signal(signal.SIGINT, signal_handler_shutdown)
signal.signal(signal.SIGTERM, signal_handler_shutdown)
signal.signal(signal.SIGUSR1, signal_handler_stackdump)
signal.signal(signal.SIGUSR2, signal_handler_mem)
_server = CherryPyWSGIServer(
config.SERVER_LISTEN_ADDR,
wsgiapp.application,
config.SERVER_THREAD_NUM,
perfork=1,
after_perfork=lambda worker_id: wsgiapp_workers.initialize_workers()
)
_server.start()优雅退出流程
使用示例
优雅退出
查看堆栈
查看内存
设计原则
Last updated