как ребенок в этой программе будет бегать?

Я не совсем понимаю функцию fork, я не понимаю, как отец и ребенок обрабатывают contineo из функции fork() или пропускают эту строку и переходят к следующей. Например:

int value = 0;
if (fork()!=0)
{
 wait(&value);
 value = WEXITSTATUS(value);
 value++;
}
printf("%d\n",value);
value+=2;
exit(value);

когда мы реализуем функцию форка, отец переходит к функции ожидания (), но что я не понимаю, откуда ребенок начинает работать с if () или он избегает ее и сразу переходит к printf? Спасибо за помощь :)


person Eli    schedule 13.04.2016    source источник
comment
Что произошло, когда вы попробовали это?   -  person Martin James    schedule 13.04.2016
comment
на самом деле я не просто пытался понять форк и что произойдет в этой функции   -  person Eli    schedule 13.04.2016
comment
Почему вы не пробовали? Запустив его, можно было бы продемонстрировать его работу.   -  person Martin James    schedule 13.04.2016
comment
я изучаю операционную систему, и я новичок во всем этом, поэтому я не знаю, как это сделать. я думаю, что мне нужен линукс, которого у меня нет :/   -  person Eli    schedule 13.04.2016
comment
если вы изучаете операционную систему, то сначала подумайте, что вам следует сначала настроить систему Linux или виртуальную машину в Windows. Я настоятельно рекомендую вам сначала запустить программу, а затем использовать gdb и отладить программу, которую вы написали.   -  person Sridhar Nagarajan    schedule 13.04.2016
comment
Один процесс вызывает fork, но возвращает результат в каждом из двух процессов.   -  person David Schwartz    schedule 13.04.2016
comment
Я не понимаю - если у вас нет ОС и/или исходного кода, который вы создали и протестировали... откуда взялся этот код?   -  person Martin James    schedule 13.04.2016


Ответы (2)


Вся программа дублируется, и отец и сын начинают с fork(). Отец входит внутрь if, потому что возвращаемое значение его ответвления не равно нулю, и после перехода к

printf("%d\n",value);
value+=2;
exit(value);

в то время как сын просто переходит на эту строку, потому что pid равен нулю.

Сын выходит из 2 из-за строки value += 2.

Отец ждет это значение (т.е. значение = 2), увеличивает его (значение = 3), а затем добавляет 2 (значение = 5).

person Boiethios    schedule 13.04.2016
comment
если я правильно понимаю, это означает, что если дочерний и отцовский процессы работают, то вывод будет: 0, а затем 3? - person Eli; 13.04.2016

fork() в основном создает копию вызывающего его процесса.

Это означает состояние выполнения этого процесса, когда он вызвал fork(), включая текущий указатель инструкции. Основное различие между родительским и дочерним процессами заключается в том, что новая копия старого процесса модифицируется таким образом, что возвращаемое значение из fork() будет возвращать 0, а для старого процесса оно возвращает PID.

За исключением этого, потомок будет в том же состоянии, что и родитель, и продолжит выполнение с той же точки, что и родитель, то есть вызов fork().

person JimmyB    schedule 13.04.2016