这是我写的程序

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<iostream>
#include<wait.h>
int main(void){
    std::cout << "My process " << getpid() << std::endl;
    int i;
    for(i=0;i<2;i++){
        int j = fork();
        wait(NULL);

        std::cout << "Process id :" << getpid() <<" and parent:"<< getppid()<< " and value returned is " << j <<std::endl;
    }
    return 0;
}

这是我得到的输出:
My process 5501
Process id :5502 and parent:5501 and value returned is 0
Process id :5503 and parent:5502 and value returned is 0
Process id :5502 and parent:5501 and value returned is 5503
Process id :5501 and parent:2828 and value returned is 5502
Process id :5504 and parent:5501 and value returned is 0
Process id :5501 and parent:2828 and value returned is 5504

有人能给我解释一下结果吗?该计划的目的是以DFS的方式“访问”流程。但是,我不明白第三行返回的值是5503,还有为什么,即使我只运行了两次循环,5504是被创建的?提前谢谢。

最佳答案

5503被返回到名为fork()的父级,因为在父级中,fork()返回其新创建的子级的PID,在子级中,0被返回。因此,您需要对if的返回值执行fork()来测试您是在父级还是子级中,以便只能在所需的代码中运行后续代码,否则将在这两个代码中运行。
至于问题的第二部分,您需要在再次(循环的第二次迭代)之前检查您是否在父级(或子级,具体取决于您要创建第二个子级的人)中;如果不在,则需要检查您是否在父级(或子级,具体取决于您要创建第二个子级的人),父项和子项(从第一次迭代中调用它开始)都将调用fork,并且每个子项都创建另一个子项。这就是为什么父节点正在创建for

07-28 03:06
查看更多