如何停止init_module:linux内核

gan*_*ars 4 linux kernel kernel-module

我有一个如下的程序.

test_module.c:

#include <linux/version.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/delay.h>

int init_module(void)
{
        while(1) {
                pr_info("hello 4 sec\n");
                msleep(4 * 1000);
        }
        return 0;
}

void cleanup_module(void)
{
        pr_info("module removed successful\n");
}
Run Code Online (Sandbox Code Playgroud)

当我加载此模块时,我的终端变得冻结/阻止.如何阻止这个程序.我试过了sudo rmmod test_module,但没用.所以我重启了我的系统.如何打破init_module?将来,如果出现问题,如果我init_module没有结束那么该怎么办?如果我们不停止会发生什么init_module

Jan*_*dec 5

通过重新启动机器.

这是唯一的方法.用户域进程是孤立的,可以强制终止所有这些,但在内核中没有这样的保护.

init_module功能不应该在延长的时间内做任何事情.它应该只将模块注册到适当的数据结构.

如果您需要在内核中定期执行某些操作,则需要安排tasklet或worqueue或创建内核线程.另请参见何时在Linux内核中使用内核线程与工作队列.但是大多数内核代码应该只是在某处注册并在适当的事件(从硬件或通过系统调用从用户域)发生时运行.