这个问题是我期中考试的一部分,教授给出的答案非常荒谬。
我只想知道什么是正确答案。
代码:
#include<unistd.h>
// Other Libraries
void ChildProc()
{
sleep(10);
printf("Child Process\n");
}
void ParentProc()
{
printf("Parent Process");
}
int main()
{
pid_t pid;
pid = fork();
if(pid==0)
ChildProc();
else
ParentProc();
return 0;
}
问题: 以下代码的所有可能输出是什么?
我的回答是,
1)
输出: None
原因:当fork失败时。(系统不允许创建子进程)
2)
输出: Parent Process
原因:因为父母和孩子现在都处于竞争状态。谁可能先执行,父进程会提前完成并因此退出函数,然后程序本身将退出。现在,当父母结束时,孩子无法活着。就这样也结束了。
但是教授考虑了另一种状态,当孩子首先开始执行并开始睡眠循环时。现在轮到父母了,处理器太忙了,因此让进程处于挂起状态约 10 秒。现在到这个时候孩子完成睡眠并恢复执行,逐渐父执行,因此输出是,
输出:
Child Process
Parent Process
虽然这种情况发生的可能性非常非常非常少,并且只有当进程上下文切换器非常繁忙但他仍然说有可能?现在我不相信他的推理,要知道这真的有可能吗,至少在现在的 linux OS 中是这样吗?