[英]Counting the number of siblings a process has, Linux kernel
我正在使用list_for_each
宏和current
task_struct
的sibling
字段来打印出current
拥有的兄弟姐妹数量。
这是代码( inf.num_siblings
跟踪兄弟姐妹的数量):
struct list_head *curr_node;
....
list_for_each(curr_node, &(current->sibling)) {
inf.num_siblings++;
}
...
//print inf.num_siblings
current->sibling
指向循环链接列表中的一个节点,因此我认为上面的代码应该正确计算所述列表中的兄弟姐妹/节点数。
这段代码似乎最有效。 如果我在后台运行一个程序,而该程序只是在运行“计数同级”代码之前永久循环,那么current
进程的同级数与运行循环代码之前存在的计数相比增加了一个。 但是,如果我运行一个在开始循环之前调用一次fork()
的进程,而不是看到同级计数增加了我所期望的2,它只会增加1。 这是为什么?
这是派生然后循环的代码:
#include <sys/types.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
fork();
while(1){
sleep(3);
}
return 0;
}
调用fork
您将创建一个child
进程而不是sibling
进程。 当您分叉时,您将增加current->children
计数,而不是current->sibling
计数:)
来自: http : //man7.org/linux/man-pages/man2/fork.2.html
当您调用fork()时,您创建的新进程是子进程,而不是您在其中调用fork()的进程的同级进程。 在这种情况下,同级没有正确增加。
现在,如果您多次调用fork(),并跟踪第一个子进程的同级计数,您将看到同级计数增加。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.