You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 18:45:29