如何在内核模块中捕获信号

How to catch a signal in a kernel module

我有一个内核模块,它在 init 例程中有一个 while(1) 循环,它应该 运行 无限。

如果我在用户 space 程序中有等效代码,当我按下 Control+C 时,用户 space 程序将终止,但内核模块并非如此。

有没有办法向内核模块发送终止信号(当它仍在 运行 初始化其初始化例程时)以便它可以终止/退出?

提前致谢

在内核中你可以使用signal_pending()fatal_signal_pending()来检查signal/fatal信号是否到达:

while(!fatal_signal_pending(current) {
    // infinite loop
}

因此,您可以按下 Control+C insmod <your-module.ko>,模块的 init 函数将终止循环。


内核线程(使用kthread_create()或类似的创建)可能仅在允许使用allow_signal()

时捕获信号