Im изучая оперативные системы и не может действительно понять этот кусок кода:C процесс и процесс порождения
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
int pid;
int i;
pid = fork();
switch(pid)
{
case -1:
perror ("Error \n");
break;
case 0:
for(i=1; i < 11; i++)
printf ("Im the son %d, My father is %d - Loop %d \n", getpid(), getppid(), i);
break;
default:
for(i=1; i < 11; i++)
printf ("Im the father %d and my father is %d - Loop %d \n", getpid(), getppid(), i);
wait(NULL);
printf("End of the father process %d - My son process %d have finished.\n", getpid(), pid);
break;
}
}
Я понимаю, что вы вилка (создать дубликат процесса), если все прошло нормально (разные от -1), то он зацикливается на for
десять раз, а затем ломается, что я не понимаю, так как сын может вернуться к for
, я имею в виду, если это 0 (сын), вы печатаете «это сын X и мой отец Y ", а затем ломается. как получается, что он обходит их обоих в 10 раз ?.
Дочерний процесс исполняет «случай 0:» положение и исходный процесс (родительский) выполняет «по умолчанию:» дизъюнкция. Оба они работают одновременно (хотя порядок выполнения кода не определен). – Mick
Спасибо Мику, теперь он не определен, но что дает? Я имею в виду, в какой-то момент они заканчиваются (возможно, смешанные). Есть ли какая-то часть Оперативной системы, которая придает приоритет процессу, чем другой? – user3442470
Я действительно неправильно понял ваш вопрос. Райли понял все правильно. – Mick