Linux内核驱动中捕获待处理信号及日志记录问题
问题:记录终止驱动read()等待进程的信号
我希望记录从用户空间发送到驱动read()函数、终止等待进程(如wait_interruptible)的信号。Linux内核中有很多管理信号的系统调用,但找不到像用户空间sigpending()那样获取当前信号状态的方法。
更新:根据Ian Abbott的建议,我编写了如下代码:
unsigned long int flags; spin_lock_irqsave(¤t->sighand->siglock, flags); memmove((void*)&sigset, (void*)¤t->pending.signal, sizeof(sigset)); spin_unlock_irqrestore(¤t->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
相关产品推荐
相关产品推荐

