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

XII*_*XII 3 kernel-module linux-kernel

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

如果我在用户空间程序中有等效的代码,则当我按Control + C时,用户空间程序将终止,但是内核模块不是这种情况。

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

提前致谢

Tsy*_*rev 5

在内核中,您可以使用signal_pending()fatal_signal_pending()检查信号/致命信号是否到达:

while(!fatal_signal_pending(current) {
    // infinite loop
}
Run Code Online (Sandbox Code Playgroud)

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


内核线程(使用kthread_create()或类似方法创建)只有在允许使用allow_signal()