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

时间:2017-05-20 05:53:21

标签: linux-kernel kernel-module

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

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

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

提前致谢

1 个答案:

答案 0 :(得分:4)

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

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

因此,您可以按{+ 1}}的Control + C,模块的init函数将终止循环。

内核线程(使用insmod <your-module.ko>或类似内容创建)只有在允许kthread_create()

的情况下才能捕获信号