gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:44:21 24 4
gpt4 key购买 nike

这是我写的程序

#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 来测试你是在 parent 还是 child 这样你就可以只在一个中运行后续代码你想要,否则它会同时运行。

至于你问题的第二部分,你需要在forking(并等待)之前检查你是否在 parent (或 child ,取决于你想创建第二个 child 的人)中--only wait a parent) again (for 循环的第二次迭代);如果你不这样做, parent 和 child (从第一次迭代中第一次调用它开始)将调用 fork() 并各自创建另一个 child 。这就是父级创建 5504 的原因。

关于c - 让父进程等待其子进程的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39210786/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com