gpt4 book ai didi

linux - 子进程互相等待

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

我创建了三个进程,我想同步它们的工作。具体来说,我希望第一个进程等待第二个进程,第二个进程等待第三个进程。基本上按照创建它们的相反顺序执行它们。

这是我到目前为止所做的。

for (; i < 3 ; i++){
pids[i] = fork();
if (pids[i] == 0)
break;
}
if (pids[i] != 0){
wait(); // Main thread has to wait..
}
else{
if (i == 0){
waitpid(pids[1], &status, 0);
printProcessInfo(0);
}
else if (i == 1){
waitpid(pids[2], &status, 0);
printProcessInfo(1);
}
else if (i == 2){
printProcessInfo(2);
}
}

我使用 i 来检查我所在的子进程,因为我假设我在子进程中得到了正确的 i,所以如果 i = 0,我实际上在第一个子进程中。这个假设是真的吗?无论如何,我都没有得到我想要的顺序,事实上,进程按照自然顺序执行,绕过了我放置的 waitpid 调用。有任何想法吗?

最佳答案

不,您将获得超过 3 个进程。

考虑一个简化版本(这只是删除等等......你做了相同数量的 fork ):

for (i=0; i < 3 ; i++){
pids[i] = fork();
}

因为您在 for 循环内执行 fork,而不检查返回值。 parent 和 child 都会有自己的 child 。

    [###############PARENT###############]
| | |
i=0 i=1 i=2
| | |
[ a0 ] [ b0 ] [ c0 ]
/ \ |
i=1 i=2 i=2
/ \ |
[a1] [a2] [ b1 ]
|
i=2
|
[a3]

您必须在检查 fork 的返回值后中断循环。

关于linux - 子进程互相等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12688390/

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