内核:如何迭代当前进程的子进程?

在Linux内核开发第3版中,这段代码用于遍历当前进程的子代。

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

这个成语中的“兄弟姐妹”看起来不合时宜。 它的目的是什么?

siblingstruct task_struct中与父级子列表对应的list_head结构的名称。

也就是说,在此循环list始终指向struct task_structsibling成员或父成员的children成员。

siblingtask_struct一个字段。

以下是我对此的理解:

列表总是指向sibling成员,

1)当遍历children列表时,我们遍历当前任务的子节点的sibling成员

2)迭代sibling列表将遍历父母子女(或当前任务的兄弟姐妹)的兄弟sibling成员

使用sibling成员添加到父级列表可确保使用相同的成员更新2个列表(父级children和当前任务的sibling列表)。