выполнение fork () в цикле for - PullRequest
       3

выполнение fork () в цикле for

1 голос
/ 21 августа 2011
int main(int argc, char** argv) {
    int i = 0;
    while (i < 2) {
        fork();
        system("ps -o pid,ppid,comm,stat");
        i++;
     }
     return (EXIT_SUCCESS);
}

Может кто-нибудь сказать мне, сколько раз команда ps выполняется с объяснением?

Ответы [ 3 ]

6 голосов
/ 21 августа 2011

Я полагаю, что ответ - 6.

в первой итерации, вызывается fork(), разбивая процесс на 2, таким образом вызывая ps дважды.

во второй итерации, forkвызывается снова в каждом процессе, поэтому теперь у вас есть 4 процесса, выполняющих ps.

всего обращений к ps: 2 + 4 = 6.

4 голосов
/ 21 августа 2011

6 раз.

Создает дерево процессов следующим образом:

A-+
  |-B-+
  |   |-C-+
  |-D

А делает это дважды (я = 0)

B делает это дважды (i = 0)

C делает это один раз (i = 1)

D делает это один раз (i = 1)

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

1 голос
/ 21 августа 2011
Initial Process
i == 0
-> Fork 1
   system call
   i == 1
   -> Fork 1.1
      system call
   system call
system call
i == 1
-> Fork 2
   system call
system call

Я считаю 6, 2 каждый из начального процесса и первого форка (4), и один из каждого процесса разветвляется, когда я == 1 из этих 2 процессов.

Конечно, предполагается, что вы исправили отсутствующую конечную скобку (и определили EXIT_SUCCESS), в противном случае ничего, поскольку она не будет компилироваться. : -)

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