C 在linux内核模块中运行无限循环
我已经做了一个模块,我想在其中运行一个无限循环,直到我不卸载该模块。目前,若我使用rmmod,它会让我注意到模块仍然很忙,并且在一段时间后内核会出现恐慌C 在linux内核模块中运行无限循环,c,linux,linux-kernel,C,Linux,Linux Kernel,我已经做了一个模块,我想在其中运行一个无限循环,直到我不卸载该模块。目前,若我使用rmmod,它会让我注意到模块仍然很忙,并且在一段时间后内核会出现恐慌 while(1) { ....... } 有没有什么技巧可以让我运行无限循环直到卸载模块。我不确定这是否有效,但是使用while(1),而不是while(notStopped),首先设置为1,然后在stop\u module()中设置为0,这个循环在哪个上下文中运行?这是一个非常重要的问题。 如果init_module运行它,那么i
while(1)
{
.......
}
有没有什么技巧可以让我运行无限循环直到卸载模块。我不确定这是否有效,但是使用
while(1)
,而不是while(notStopped)
,首先设置为1
,然后在stop\u module()
中设置为0
,这个循环在哪个上下文中运行?这是一个非常重要的问题。如果
init_module
运行它,那么insmod
过程将永远不会结束,这是非常糟糕的。如果某个系统调用运行它,那么该系统调用将不会返回,也将是错误的。
在这两种情况下,都无法终止进程(甚至
kill-9
)。如果您是在软irq处理程序(或者更糟的是,在硬irq处理程序)中执行此操作,您将挂起系统。
如果您在专用于此任务的内核线程中执行此操作,则有机会将其正确执行。
但是,如果您不想完全占用CPU,则需要调用调度程序,让它运行其他任务
msleep_interruptable
是一个很好的方法。这听起来不是个好主意。你想实现什么?也许考虑使用定时器接口代替;