繁体   English   中英

使父进程等待其子进程的正确方法是什么?

[英]What is the correct way to make a parent process wait for its child processes?

这是我写的程序

#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 因此,您需要对fork()的返回值执行if ,以测试您是在父级还是子级中,以便可以仅在所需的代码中运行后续代码,否则它将同时在两个代码中运行。

至于问题的第二部分,您需要在再次fork (并等待-仅等待父母)之前检查您是否在父母(或孩子,取决于您想要创建第二个孩子)中。 for循环的第二次迭代); 如果不这样做,则父项和子项(从第一次在第一次迭代中第一次调用)都将调用fork()并各自创建另一个子项。 这就是为什么父母要创建5504

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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