【发布时间】:2016-07-30 03:12:23
【问题描述】:
(1) 假设主进程调用fork(),它返回-1,所以进程没有子进程。
在主进程中调用wait(&status) 之后,根据手册,它将返回-1。 'status' 变量是否会保持不变,就像调用之前一样?
(2) 遇到(1)中的这种情况,如果在wait(&status)行之后,有一行status = WEXITSTATUS(status),那么'status'变量会改变吗?
int status = 0;
if (fork()!=0) {
wait(&status);
status = WEXITSTATUS(status);
}
【问题讨论】:
-
这些问题很有趣;除了在这里发帖之外,您还做了什么来尝试回答这些问题?
-
搜索谷歌,offcourse :) 因为我不能对这种情况进行模拟,所以我在问。人的具体行为没有什么特别的。
-
我不明白这个问题。语法问题。
-
如果函数失败,状态变量将不会被修改,这似乎很直观,但我在pubs.opengroup.org/onlinepubs/9699919799/functions/waitpid.html 没有看到任何明确说明的内容。语言律师可能会对此感到满意。
-
出于实用目的,您可以轻松测试当前系统的行为方式。继续在没有孩子的新流程中致电
wait。它无法区分一个因为 fork 失败而没有子进程的进程,一个因为从未调用 fork 而没有子进程的进程,以及一个因为它们已经退出(并被前一个进程清理)而没有子进程的进程。等等)
标签: c operating-system fork wait