如何在Python中处理多个中断信号,实现二次中断立即退出?
处理第二次中断信号立即退出的方案
要实现第二次触发SIGINT(Ctrl+C)时无需等待直接退出,可以通过全局标志位跟踪当前是否处于退出流程,修改后的代码如下:
import signal import time import sys # 全局标志,标记是否正在执行退出流程 exiting = False def handle_interrupt(signum, frame): global exiting if exiting: print('收到第二次中断,立即退出!') sys.exit(1) exiting = True print('将在5秒后优雅退出...') time.sleep(5) sys.exit(0) signal.signal(signal.SIGINT, handle_interrupt) print('将休眠5分钟...') time.sleep(300)
关键逻辑说明:
- 新增
exiting全局变量,初始为False,用于判断是否已经在处理第一次中断请求。 - 第一次触发
SIGINT时,exiting被设为True,执行原有的5秒等待流程后退出。 - 若在等待期间再次触发
SIGINT,函数会检测到exiting为True,直接打印提示并调用sys.exit()立即退出,跳过sleep(5)步骤。
注:Python信号处理机制中,当信号处理函数正在执行时,同类信号会被暂时阻塞直到当前处理完毕,但通过全局标志位,我们可以在处理函数内部直接响应第二次中断请求,无需等待阻塞解除。
内容的提问来源于stack exchange,提问作者Jacob Bayer
相关产品推荐
相关产品推荐

