Количество процессов в операторах fork (), включая программу - PullRequest
0 голосов
/ 11 октября 2019

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

Например, этот код, в котором я создаю 2 вилки

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv, char **envp)
{
    printf("%d *\n", getpid());
    fork();
    printf("%d *\n", getpid());
    fork();
    printf("%d *\n", getpid());
    sleep(20);
    return EXIT_SUCCESS;
}

Из того, что я знаю, будет исходный родительский процесс (который я считаюпрограмма), а затем будет начальный форк, создающий дочерний процесс.

Это оставляет 2 процесса. Затем другой форк создает еще 2 дочерних процесса для 5 процессов, включая исходный родительский процесс.

Исходя из этого понимания, общее количество дочерних процессов составит 3 (2 ^ 2-1), а общее количество созданных процессовкроме того, исходный родительский процесс будет 4.

Правильно ли мое мышление?

Кроме того, что может привести к сбою разветвления?

1 Ответ

1 голос
/ 11 октября 2019

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

РЕДАКТИРОВАТЬ: я рекомендую прочитать руководство для методов, которые вы изучаете и используете, например, http://man7.org/linux/man-pages/man2/fork.2.html

Вы найдетеЕсть все объяснения, включая возможные причины отказа.

...