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

Linux内核驱动中捕获待处理信号及日志记录问题

问题:记录终止驱动read()等待进程的信号

我希望记录从用户空间发送到驱动read()函数、终止等待进程(如wait_interruptible)的信号。Linux内核中有很多管理信号的系统调用,但找不到像用户空间sigpending()那样获取当前信号状态的方法。

更新:根据Ian Abbott的建议,我编写了如下代码:

unsigned long int flags;
spin_lock_irqsave(&current->sighand->siglock, flags);
memmove((void*)&sigset, (void*)&current->pending.signal, sizeof(sigset));
spin_unlock_irqrestore(&current->sighand->siglock, flags);
for(i = 1; i < _NSIG; i ++)
{
    if(sigismember(&sigset, i))
    {
            ...
    }
}

但发现以下问题:

  • _NSIG的值不是30或32,而是64(原因是什么?)
  • 当用户空间收到SIGINT(^C)时,仅能记录到信号9(SIGKILL)。此时我不确定记录接收信号的工作是否有意义,因为无论用户空间收到什么信号,驱动处理进程似乎都会被SIGKILL终止……

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 13:30:54