這個問題是我的中級考試的一部分,其教授給出的答案相當荒謬。當一個子進程正在執行時,CPU能否將進程保持在掛起狀態10秒鐘?
我只是想知道什麼是正確的答案。
CODE:
#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)
OUTPUT:None
理由:當叉失敗(系統不允許子進程的創建)
2)
OUTPUT:Parent Process
原因:父母和孩子現在都處於競爭狀態。誰可能首先執行,父母提前結束並因此退出該功能,然後程序本身將退出。父母結束後,孩子不能活下去。因此它也結束。
但是,教授考慮另一個狀態,當孩子開始執行第一次,並開始睡眠循環。現在輪到父母了,處理器太忙了,從而使進程處於掛起狀態約10秒。現在這個時候孩子完成休眠和恢復執行,並逐步父執行,從而輸出,
OUTPUT:
Child Process
Parent Process
雖然這種情況發生的概率是非常非常非常很少見,只有當流程上下文切換器非常繁忙時,但他仍然認爲這是可能的? 現在我不相信他的推理,知道什麼是真的可能,至少在現在的一天linux操作系統?
我有類似的觀點,但事實上,在執行之前進程保持阻塞狀態10秒實際上是不可能的。我的論點是,理論上它可能但實際上是不可能的。 –
同意。這需要一些非常特殊的情況。就像另一個進程在子進程開始的時刻具有更高的優先級。但即使如此,扭轉訂單也不太可能。 –
絕對同意,但問題是「是它**可能**?」 –