如何在内核模块中捕获信号
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()
时捕获信号
我有一个内核模块,它在 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()