C - 在 Linux 内核模块中运行无限循环



我做了一个模块,我想在其中运行一个无限循环,直到我不卸载模块。目前,如果我做 rmmod,它会让我注意到模块仍然很忙,一段时间后内核崩溃。

while(1)
{
    .......
}

有什么技巧可以让我运行无限循环直到卸载模块。

此循环在哪个上下文中运行?这是一个非常重要的问题。

如果init_module运行它,那么insmod过程将永远不会结束,这是非常糟糕的。
如果某个系统调用运行它,那么系统调用将不会返回,并且也会很糟糕。
在这两种情况下,都没有办法杀死进程(甚至没有kill -9)。
如果你在softIRQ处理程序(或者更糟糕的是,hardIRQ处理程序)中执行此操作,你将挂起系统。

如果您在专用于此任务的内核线程中执行此操作,则有机会正确执行。
但是,如果您不想完全占用CPU,则需要调用调度程序并让它运行其他任务。 msleep_interruptible是一个很好的方法。

我不确定这是否有效,但与其使用 while(1) ,请使用 while(notStopped) ,它首先设置为 1,并将其设置为 stop_module() 中的 0

最新更新