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

如何无需轮询或休眠实现NMI中断的等待?

无需轮询的NMI中断等待方案

你的轮询方案会周期性占用CPU资源(哪怕sleep 1也会定时唤醒进程),可以通过文件系统事件监控的方式实现无轮询等待,以下是实用的优化方案:

方案一:使用inotifywait监控/proc/interrupts变化

inotifywait能监听文件的修改事件,只有当/proc/interrupts内容更新时才触发检查逻辑,完全避免轮询和休眠机制的资源浪费。

实现步骤

  1. 先安装依赖工具包:

    # Debian/Ubuntu 系列系统
    sudo apt install inotify-tools
    # RHEL/CentOS 系列系统
    sudo yum install inotify-tools
    
  2. 替换后的优化脚本:

    #!/bin/bash
    
    # 阻塞等待/proc/interrupts的修改事件,无变化时不占用CPU
    while inotifywait -e modify /proc/interrupts >/dev/null; do
        # 提取NMI中断计数并去除前导零和非数字字符
        RES=$(grep NMI /proc/interrupts | sed 's/[^0-9]*//g' | sed 's/^0*//')
        # 检查计数非空(即NMI中断已发生)
        if [ -n "$RES" ]; then
            echo "DONE"
            exit 0
        fi
    done
    

原理说明

  • inotifywait -e modify /proc/interrupts会进入阻塞状态,直到内核更新/proc/interrupts文件(NMI中断发生时内核会同步更新该文件的计数),期间不会消耗额外CPU资源。
  • 仅在文件内容发生变化时才执行检查逻辑,相比轮询模式效率提升明显。

方案二:内核kobject uevent监听(进阶)

如果需要更底层的控制,可以通过监听内核uevent事件捕获中断相关通知,但这种方式需要调整内核配置并编写更复杂的处理逻辑,对于普通场景来说inotifywait方案已经足够简洁高效。

注意事项

  • /proc/interrupts是内核生成的虚拟文件,多数主流内核版本都支持inotify监控其修改事件,若遇到兼容性问题可手动触发NMI中断验证脚本响应情况。
  • 脚本需以root权限运行,确保能正常读取/proc/interrupts的完整内容。

内容的提问来源于stack exchange,提问作者Maestro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 22:32:33