Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在linux内核模块中运行无限循环_C_Linux_Linux Kernel - Fatal编程技术网

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

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

我已经做了一个模块,我想在其中运行一个无限循环,直到我不卸载该模块。目前,若我使用rmmod,它会让我注意到模块仍然很忙,并且在一段时间后内核会出现恐慌

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

}

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

我不确定这是否有效,但是使用
while(1)
,而不是
while(notStopped)
,首先设置为
1
,然后在
stop\u module()
中设置为
0
,这个循环在哪个上下文中运行?这是一个非常重要的问题。

如果
init_module
运行它,那么
insmod
过程将永远不会结束,这是非常糟糕的。
如果某个系统调用运行它,那么该系统调用将不会返回,也将是错误的。
在这两种情况下,都无法终止进程(甚至
kill-9
)。
如果您是在软irq处理程序(或者更糟的是,在硬irq处理程序)中执行此操作,您将挂起系统。

如果您在专用于此任务的内核线程中执行此操作,则有机会将其正确执行。

但是,如果您不想完全占用CPU,则需要调用调度程序,让它运行其他任务
msleep_interruptable
是一个很好的方法。

这听起来不是个好主意。你想实现什么?也许考虑使用定时器接口代替;