gpt4 book ai didi

c - 使用 list_for_each 为 Linux 内核进程实现 DFS

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:52:08 24 4
gpt4 key购买 nike

我正在尝试实现一个 DFS 来打印出 linux 内核中的所有进程。 list_for_each 函数引起了我的兴趣,如下所示:

list_for_each(list, &init_task->chidlren){
task = list_entry(list, struct task_struct, sibling);
}

是否可以使用 list_for_each 函数进行 DFS?由于 list_for_each 仅打印出第一层的 child ,因此似乎不可能到达单个 child 的最深层次。

最佳答案

我假设您是从操作系统书籍中获得该代码的。我真的不喜欢他们如何欺骗您认为 list_for_each(list, &init_task->chidlren) 是您需要使用的正确语句。不过,Oliver 对递归的看法是正确的。

您可以执行类似以下操作来完成 DFS。

void some_function(struct task_struct *task) {

struct list_head *list;
struct task_struct *another_task;

printk("Print out the task info here");

list_for_each(list, &task->children) {
another_task = list_entry(list, struct task_struct, sibling);
some_function(another_task);
}
}

由于这是一个 linux 内核模块,您还需要以下内容。

int simple_init(void){

printk(KERN_INFO "Loading Module By Stratos\n");

some_function(&init_task);

return 0;
}

&init_task 用在你需要的代码中,只是不在他们放的地方。

关于c - 使用 list_for_each 为 Linux 内核进程实现 DFS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28520442/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com