当前位置:  开发笔记 > 编程语言 > 正文

为什么在获取进程的子级时使用同级列表获取task_struct

如何解决《为什么在获取进程的子级时使用同级列表获取task_struct》经验,为你挑选了0个好方法。

内核task_struct如下所示。我对两个成员(子级和同级成员)更感兴趣,因此我从此内核结构中删除了其他元素。

  struct task_struct{
        // some data elements .


          struct list_head children;      
              /* list of my children */

          struct list_head sibling;
              /* linkage in my parent's children list */
        //some data members 
        };

“子项”是进程子项的task_struct的双向循环链接列表。如果要从当前进程访问子项,则必须使用宏“ list_for_each”遍历“子项”列表,如下所示:

struct task_struct *task; 
struct list_head *list;
list_for_each(list, ¤t->children) { 
task = list_entry(list, struct task_struct, sibling); /* task now points to one of current’s children */ 
}

list_for_each最终将使用下一个子项初始化“ list”。现在,由于我们要遍历子项列表,因此理想情况下,我们应该从“ list”指针中减去“子项”列表的偏移量,以获取当前进程的tast_struct地址。是什么原因导致我们在此处传递“兄弟”,而最终导致具有不同偏移量的另一个列表?

请注意:这是有效的代码,我要了解的是为什么当应使用children指针计算正确的偏移量并因此计算child的task_struct地址时为什么使用同级。

提前致谢 。

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有