繁体   English   中英

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

[英]Counting the number of siblings a process has, Linux kernel

我正在使用list_for_each宏和current task_structsibling字段来打印出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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM