gpt4 book ai didi

linux - CPU 能否在子进程执行时将进程保持在挂起状态 10 秒?

转载 作者:太空宇宙 更新时间:2023-11-04 09:30:04 25 4
gpt4 key购买 nike

这个问题是我期中考试的一部分,教授给出的答案很荒谬。

我只想知道什么是正确答案。

代码:

#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)
输出:
原因:当fork失败时。(系统不允许创建子进程)

2)
输出: 父进程
原因: 因为 parent 和 child 现在都处于比赛状态。谁先执行,父进程提前完成并退出该函数,然后程序本身将退出。现在,当 parent 结束时, child 无法继续活着。因此它也结束了。

但是教授考虑了另一种状态,当 child 首先开始执行并开始 sleep 循环时。现在轮到父进程了,处理器太忙,因此使进程保持挂起状态约 10 秒。现在这个时候子完成 sleep 并恢复执行,逐渐父执行,因此输出是,

输出:
子进程
父进程

虽然这种情况发生的概率非常非常非常少,而且只有在进程上下文切换器非常忙的时候才发生,但他仍然说有可能吗?现在我不相信他的推理,我知道这是否真的有可能,至少在现在的 linux 操作系统中是这样??

最佳答案

从理论上讲,父进程被阻塞 10 秒是可能的 [不是 CPU 本身,而是 OS 调度机制]。但是由于在这种情况下 fork 进程与父进程具有相同的优先级,因此子进程不太可能在父进程完成之前运行,但就像任何两个未同步的进程一样,不可能完全保证它们的执行顺序。

当然,在我的机器上,子进程在父进程完成后很久才会运行。所以输出是:

Parent process 
[my prompt $] Child Process

每一次。但这并不是绝对 100% 保证会以这种方式发生。

关于linux - CPU 能否在子进程执行时将进程保持在挂起状态 10 秒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32508657/

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