我有一个内核模块,在init例程中有一个while(1)循环,应该无限运行。
如果我在用户空间程序中有相同的代码,当我按Control + C时,用户空间程序终止,但内核模块不是这种情况。
有没有办法向内核模块发送一个kill信号(当它仍在运行其init例程时),以便它可以终止/退出?
提前致谢
答案 0 :(得分:4)
在内核中,您可以使用signal_pending()
或fatal_signal_pending()
来检查信号/致命信号是否到达:
while(!fatal_signal_pending(current) {
// infinite loop
}
因此,您可以按{+ 1}}的Control + C,模块的init函数将终止循环。
内核线程(使用insmod <your-module.ko>
或类似内容创建)只有在允许kthread_create()