计算一个进程拥有的兄弟姐妹的数量,Linux内核

时间:2016-04-17 18:13:30

标签: c linked-list linux-kernel

我正在使用list_for_each宏和sibling current的{​​{1}}字段来打印出task_struct兄弟姐妹的数量。

这是代码(current跟踪兄弟姐妹的数量):

inf.num_siblings

struct list_head *curr_node; .... list_for_each(curr_node, &(current->sibling)) { inf.num_siblings++; } ... //print inf.num_siblings 指向循环链接列表中的节点,因此我认为上面的代码应该正确计算所述列表中兄弟节点/节点的数量。

此代码似乎主要起作用。如果我在后台运行一个程序,它只是在运行“count siblings”代码之前永远循环,那么current->sibling进程的兄弟节点数与运行循环代码之前存在的计数相比增加了一个。但是,如果我在开始循环之前运行一次调用current的进程,而不是像我预期的那样看到兄弟计数增加2,它只会增加1。那是为什么?

以下是分叉然后循环的代码:

fork()

2 个答案:

答案 0 :(得分:2)

当您致电fork时,您创建的child流程不是sibling。当您分叉时,您将current->children计数增加而不是current->sibling计数:)

答案 1 :(得分:0)

来自:http://man7.org/linux/man-pages/man2/fork.2.html

当你调用fork()时,你创建的新进程是一个子进程,而不是你调用fork()的进程的兄弟。在这种情况下,兄弟姐妹正确地没有增加。

现在,如果您多次调用fork()并跟踪第一个子进程的兄弟计数,您将看到兄弟计数上升。