【发布时间】:2021-07-09 16:00:45
【问题描述】:
假设我在 main 中写了以下内容:
int main() {
int status;
if ((p1 = fork()) != 0) {
if ((p2 = fork()) != 0) {
wait(&status);
wait(&status);
} else {
processB();
}
}
return 3;
}
加:
int processB() {
return 1;
}
当进程 p2 结束时,它在 &status 中保存的值是多少?
如果它以 exit(100) 结束,那么它将返回 100,但我不知道在这种情况下会发生什么?
【问题讨论】:
-
} }}在main中缺少return意味着main返回0。 -
已修复,感谢您指出这一点
-
为什么不在每次
wait()调用后打印status? -
@Barmar 知道但不知道它来自哪里
-
您的代码存在竞争条件。无法保证哪个子进程将首先退出,因此您的两个等待调用可以将 p1 或 p2 的退出状态放入
status。每个等待调用的返回值将是进程 ID,因此您可以将其与 p1 或 p2 进行匹配,以查看您得到了哪个,如果这对您很重要。