Этот вопрос был частью моих экзаменов в середине семестра, и ответ на него, данный профессором, совершенно абсурден.
Я просто хочу знать, какой правильный ответ.
КОД:
#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
ПРИЧИНА: При сбое ветвления. (Система не разрешает создание дочернего процесса)
2)
ВЫВОД: Parent Process
ПРИЧИНА: Поскольку и родитель, и дочерний элемент теперь находятся в состоянии гонки. Кто бы ни мог выполниться первым, родитель завершит работу раньше и, таким образом, выйдет из функции, а затем завершится сама программа. Теперь ребенок не может остаться в живых, когда родитель закончился. Так оно и заканчивается.
Но проф рассматривал другое состояние, когда дочерний начинает выполнение первым и запускает цикл сна. Теперь очередь родителя, процессор слишком занят и, таким образом, держит процесс в состоянии ожидания в течение ~ 10 секунд. Теперь к этому времени дочерний элемент завершает сон и возобновляет выполнение, а родитель постепенно выполняет, и, таким образом, вывод:
ВЫВОД:Child Process
Parent Process
Хотя вероятность этого очень-очень-очень редка, и только когда переключатель контекста процесса очень занят, но все же он говорит, что это возможно? Теперь я не убежден в его рассуждениях, и что знать, действительно ли это возможно, по крайней мере, в современных ОС Linux ??