加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

如何停止init_module:linux内核

发布时间:2020-12-13 23:10:46 所属栏目:Linux 来源:网络整理
导读:我有一个如下的程序. test_module.c: #include linux/version.h#include linux/module.h#include linux/kernel.h#include linux/delay.hint init_module(void){ while(1) { pr_info("hello 4 secn"); msleep(4 * 1000); } return 0;}void cleanup_module(v
我有一个如下的程序.

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 secn");
                msleep(4 * 1000);
        }
        return 0;
}

void cleanup_module(void)
{
        pr_info("module removed successfuln");
}

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

解决方法

通过重新启动机器.

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

init_module函数不应该在延长的时间段内执行任何操作.它应该只将模块注册到适当的数据结构.

如果你需要在内核中定期做一些事情,你需要安排一个tasklet or worqueue或者创建一个kernel thread.参见When to use kernel threads vs workqueues in the linux kernel.但是大多数内核代码应该只是在某个地方注册并在适当的事件时运行(来自硬件或来自userland通过系统电话)发生.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读