内核:如何迭代当前进程的子进程?
在Linux内核开发第3版中,这段代码用于遍历当前进程的子代。
list_for_each(list, ¤t->children) { task = list_entry(list, struct task_struct, sibling); /* task now points to one of current's children */ }
这个成语中的“兄弟姐妹”看起来不合时宜。 它的目的是什么?
sibling
是struct task_struct
中与父级子列表对应的list_head
结构的名称。
也就是说,在此循环list
始终指向struct task_struct
的sibling
成员或父成员的children
成员。
sibling
是task_struct
一个字段。
以下是我对此的理解:
列表总是指向sibling
成员,
1)当遍历children
列表时,我们遍历当前任务的子节点的sibling
成员
2)迭代sibling
列表将遍历父母子女(或当前任务的兄弟姐妹)的兄弟sibling
成员
使用sibling
成员添加到父级列表可确保使用相同的成员更新2个列表(父级children
和当前任务的sibling
列表)。