gpt4 book ai didi

c - 操作系统 : wait() in child process

转载 作者:行者123 更新时间:2023-11-30 18:50:34 26 4
gpt4 key购买 nike

学习OS,在任何教材上通常都会看到在父进程中使用fork()创建子进程,有时在父进程中调用wait()等待子进程完成。

但是,如果我在子进程中使用 wait() 会发生什么?

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>

int
main(int argc, char** argv){
int x;
int w1, w2;
x = 100;
printf("the initialized x is: %d\n",x);
int rc = fork();
if(rc < 0){
fprintf(stderr, "fork failed.\n");
exit(1);
}
else if(rc == 0){
//x = 200;
w1 = wait(NULL);
printf("the x in child process (pid:%d) is: %d\n", (int) getpid(), x);
} else {
x = 300;
w2 = wait(NULL);
printf("the x in parent process (pid:%d) is: %d\n",(int) getpid(), x);
}
printf("the x in the end is: %d\n",x);
printf("the returns of waits: %d, %d\n",w1,w2);
return 0;
}

这段代码运行并显示以下内容:

dhcp175:hw_ch5 Suimaru$ ./a.out 
the initialized x is: 100
the x in child process (pid:18844) is: 100
the x in the end is: 100
the returns of waits: -1, 0
the x in parent process (pid:18843) is: 300
the x in the end is: 300
the returns of waits: 0, 18844

怎么解释?

最佳答案

But, what happens, if I use wait() in the child?

你读过它的文档吗?特别是关于返回值和错误条件的部分?我看到你做了一个实验,很好;在该文档和文档之间,应该已经很清楚了,如果调用 wait() 的进程没有要等待的子进程,那么它会立即返回 -1,表示一个错误。在这种情况下,errno 将设置为 ECHILD

立即返回错误是非常有意义的,因为如果调用进程没有子进程,唯一的其他选择就是等待,可能无限期地等待一个在等待过程中就不会发生的事件。

关于c - 操作系统 : wait() in child process,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39901749/

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