вопрос о вилке () - PullRequest
       11

вопрос о вилке ()

0 голосов
/ 18 апреля 2011

Когда родительский процесс создает дочерний процесс с fork(), по моему мнению, дочерний процесс находится в состоянии Running, тогда как родительский процесс находится в состоянии Ready, т.е. ожидает завершения дочернего процесса.

Я прав?

Ответы [ 2 ]

3 голосов
/ 18 апреля 2011

Нет, fork создает копию родительского элемента.

Затем вы обычно проверяете возвращаемое значение fork, которое говорит: 0 = я - ребенок, другой: я - родитель, а ребенок имеетвозвращаемое значение в виде PID

Если родитель должен ждать окончания дочернего процесса, вам необходимо использовать функцию ожидания.

Редактировать :

см. http://linux.die.net/man/2/fork и http://linux.die.net/man/2/wait для вилки () в C.

0 голосов
/ 18 апреля 2011

Вот что-то из

После разветвления () оно не определено какой процесс - родитель или потомок - следующий имеет доступ к процессору.

Приложения, которые неявно или явно полагаться на конкретный последовательность выполнения для того, чтобы добиться правильных результатов открыты для сбой из-за условий гонки.

Далее указывается на различное поведение в разных ядрах. Суть в том, что он определяется реализацией и на него нельзя полагаться.

Также, если вы делаете хотите на него положиться, в Linux начиная с 2.6.32 "для этого есть sysctl"

kernel.sched_child_runs_first

Приветствия

...