以下是我的计划明确表达的内容:有一个父母要求孩子,这个孩子要求自己另一个孩子。所以有一个父母,一个孩子和一个子女(即这个子女的父母是孩子)。
孩子用execlp()执行命令,让我们说日期以使其变得简单。子代也这样做。
当然,孩子在执行命令之前会分子孙。
我正在寻找子进程在孩子执行自己的命令后执行命令。此外,在孩子和子女执行他们的命令后,我希望父母继续自己的过程。
我有两个问题:
这是我目前的实施:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main (int argc, char **argv){
pid_t pid1, pid2;
pid1 = fork();
if (pid1 > 0)
{
int status;
// Wait child
printf("Parent waiting for child\n");
waitpid(pid1, &status, 0);
printf("Parent has waited child\n");
// Wait subchild
printf("Parent waiting for subchild\n");
// Wait sub-child here?
printf("Parent has waited subchild\n");
// End
printf("parent end\n");
}
else
{
pid2 = fork();
// Subchild
if (pid2 == 0) {
waitpid(getppid(), NULL, 0); // wait child? it doesn't work
execlp("/bin/date", "date", "+Subchild:\"%d-%m-%y\"", (char *) 0);
_exit(EXIT_FAILURE);
}
// Child
else {
execlp("/bin/date", "date", "+Child:\"%d-%m-%y\"", (char *) 0);
_exit(EXIT_FAILURE);
}
}
return 0;
}
我的两个问题&#34;是第21和33行。
输出如下:
Parent waiting for child
Subchild:"03-10-17"
Child:"03-10-17"
Parent has waited child
Parent waiting for subchild
Parent has waited subchild
parent end
子项尽可能快地执行自己...我通过使用共享变量解决了这个问题,但感觉就像一个解决方法,我仍然遇到了父子等待子项的问题。
答案 0 :(得分:0)
感谢@JonathanLeffler我可以通过创建管道解决问题。需要时间,因为我不知道管道是如何工作的,但最终它比我想象的要容易得多。
@DavidC.Rankin我阅读了有关等待函数的文档,但在这种情况下似乎没有任何帮助。
谢谢。