Unix fork () понимание - PullRequest
       6

Unix fork () понимание

1 голос
/ 05 ноября 2011
int main(){
    fork();
}

Я знаю, что это вопрос новичка, но я понимаю, что родительский процесс теперь будет форкировать новый дочерний процесс точно так же, как родительский, что означает, что дочерний процесс также должен форкировать дочерний процесс и так далее... На самом деле это порождает только один дочерний процесс.Я не могу понять, какой код выполнит ребенок?

Ответы [ 4 ]

6 голосов
/ 05 ноября 2011

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

4 голосов
/ 05 ноября 2011

Как все уже упоминали, ребенок также начинает выполнять после того, как fork() закончил.Таким образом, он не вызывает fork снова.

Вы можете ясно видеть это в очень распространенном использовании, как это:

int main()
{
    if (fork())
    {
        // you are in parent. The return value of fork was the pid of the child
        // here you can do stuff and perhaps eventually `wait` on the child
    }
    else
    {
        // you are in the child. The return value of fork was 0
        // you may often see here an `exec*` command
    }
}
1 голос
/ 05 ноября 2011

Вы пропустили точку с запятой.

Но ребенок (а также родитель) продолжают работу сразу после того, как fork произошло. С точки зрения прикладного программирования, fork (как и все системные вызовы ) является «атомарным».

Единственное различие между двумя процессами (которые после fork имеют концептуально разделенные области памяти) является результатом fork.

0 голосов
/ 05 ноября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...