我制作了一个模块,我想在其中运行一个无限循环,直到我不卸载该模块。目前,如果我执行 rmmod,它会让我注意到模块仍然很忙,并且在一段时间后内核恐慌。
while(1)
{
.......
}
有什么技巧可以让我运行无限循环,直到我卸载模块。
我制作了一个模块,我想在其中运行一个无限循环,直到我不卸载该模块。目前,如果我执行 rmmod,它会让我注意到模块仍然很忙,并且在一段时间后内核恐慌。
while(1)
{
.......
}
有什么技巧可以让我运行无限循环,直到我卸载模块。
这个循环在什么上下文中运行?这是一个非常重要的问题。
如果init_module
运行它,那么该insmod
过程将永远不会结束,这是非常糟糕的。
如果某个系统调用运行它,那么系统调用将不会返回,并且它也将是坏的。
在这两种情况下,都没有办法终止进程(甚至没有kill -9
)。
如果您在 softIRQ 处理程序(或者更糟糕的是,hardIRQ 处理程序)中执行此操作,您将挂起系统。
如果您在专用于此任务的内核线程中执行此操作,则您有机会正确处理。
但是,如果您不想完全占用 CPU,则需要调用调度程序并让它运行其他任务。msleep_interruptible
是一个很好的方法。
我不确定这会起作用,但不是while(1)
, use while(notStopped)
,它1
最初设置为 ,然后将其设置为0
in stop_module()
。