我只是在教科书上读到等待函数,但是,我很难实现它来控制进程的顺序。结果如下:儿童ID: 141孙子ID: 142爸爸ID: 140
我想把孙子行换成子行。有什么推荐的资源来学习这种所需的控制类型吗?张贴的学习材料几乎没有涉及这些,尽管要求我做一个完全基于创建多个流程并要求执行和输出特定顺序的作业。
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(void) {
int pid;
int pid2;
pid = fork();
int aids;
wait(NULL);
switch(pid)
{
case -1:
printf("Error: Not able to fork process");
break;
case 0:
printf("Child ID: %d n", getpid());
pid2 = fork();
if(pid2==0) printf("Grandchild ID: %dn", getpid());
else if(pid2 != -1) wait(NULL); // wait for grandchild
break;
default:
printf("Dad ID: %d n",getpid() );
break;
}
//printf("Hello World %dn", getpid());
return 0;
}
正如我在评论中指出的那样,您只需要在知道孙子退出后打印子ID,这是当wait()
在子进程中返回时:
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main(void)
{
int pid = fork();
int pid2;
wait(NULL);
switch (pid)
{
case -1:
fprintf(stderr, "Error: Not able to fork processn");
break;
case 0:
pid2 = fork();
if (pid2 == 0)
printf("Grandchild ID: %dn", getpid());
else if (pid2 != -1)
{
wait(NULL); // wait for grandchild
printf("Child ID: %dn", getpid());
}
break;
default:
printf("Dad ID: %dn", getpid());
break;
}
return 0;
}
输出示例(源文件gk29.c
,可执行文件gk29
):
$ gk29
Grandchild ID: 65860
Child ID: 65859
Dad ID: 65858
$ gk29
Grandchild ID: 65863
Child ID: 65862
Dad ID: 65861
$