我创建了三个进程,我想同步他们的工作。具体来说,我希望第一个进程等待第二个,第二个等待第三个。基本上按照它们创建的相反顺序执行它们。子进程彼此等待
这是我到目前为止所做的。
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 = 0,我是事实上的拳头孩子。这个假设是真的吗?无论如何,我没有得到我想要的订单,实际上这些流程是按照自然顺序执行的,绕过了我放置的waitpid调用。有任何想法吗?
你必须这样做吗?如果每个孩子都创造一个孩子,这会容易得多。正如你目前所看到的,没有一个孩子会知道年轻的兄弟姐妹,只是年龄较大的兄弟姐妹。 IOW,当父级创建child1时,child1是它自己的进程。该进程的pid表不会被更新以反映更多的孩子。只有父母的pid表具有所有信息。您的waitpid()调用可能在ECHILD上失败(您没有检查),这就是为什么它看起来没有被执行。 – Duck
我想通了。这是一个非常混乱的学校任务,因为教授特别要求我们不要让第一个叉子等第二个,所以我很困惑。我想我会研究一些其他形式的IPC,即使我们还没有在这个章节中讨论过,也是如此。谢谢。 –