首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计划延迟工作时系统被阻塞

计划延迟工作时系统被阻塞
EN

Stack Overflow用户
提问于 2020-02-19 16:56:27
回答 1查看 102关注 0票数 0

我正在从事一个嘉奖项目,我必须了解linux工作队列的用法。出于这个原因,我开发了一个小模块,它只需在1000 jiffies之后调度自定义工作队列上工作的执行。但是,当超时过期时,系统会被阻塞,我需要重新启动VM,并且我无法收集任何用于调试的信息。

下面是我正在使用的代码的部分:

代码语言:javascript
复制
static void enqueue_message(struct work_struct *work){

    printk("%s: Step 2\n", MODULE_NAME);
    return; 
}

int init_module(void){

    struct workqueue_struct *workqueue; 
    struct delayed_work deferred_write;
    workqueue = alloc_workqueue("pending_writes",WQ_MEM_RECLAIM, 0);
    INIT_DELAYED_WORK(&deferred_write, enqueue_message);
    queue_delayed_work(workqueue, &deferred_write, 1000);
    printk("%s: Step 1\n", MODULE_NAME);
    return 0;
}

如果我很快(在计时器到期之前)请求shell上的“dmesg”,我可以读取“步骤1”打印,但是我不能使用系统。我知道在代码中可能有一个初学者的错误,但我不能个性化。谢谢大家的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-19 20:50:03

与Linux内核中的许多其他函数一样,queue_delayed_work希望它的参数是exist,直到工作被触发为止。

但是,您传递函数一个局部变量 (deferred_write) --当init_module函数返回时,已被销毁。

使用全局变量代替。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60305511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档