Сколько процессов создает эта программа? - PullRequest
0 голосов
/ 02 апреля 2012
...
int main(void)
{
    int i;
    for(i=0;i<2;i++){
      switch(fork()){
        case 0:
          sleep(1);
          break;
        default:
          sleep(1);
       }
    }
    while(i--) wait(NULL);
    return 0;
}

Привет. Я пытаюсь понять процессы и вилки.

Я не уверен, сколько процессов создает этот фрагмент кода.

1 для основной программы, затем основная программа дублирует себя (создается дочерний процесс), а затем дочерний процесс дублирует себя (2 дочерних процесса и основной процесс).

Итак, это 3 процесса.

Я прав или я что-то упустил?

Ответы [ 2 ]

2 голосов
/ 02 апреля 2012

В основном потоке (t1) есть цикл for, который дважды вызовет fork() (-> t1.1, t1.2).Первый разветвленный поток (t1.1) имеет еще одну итерацию, поэтому он создает другую (-> t1.1.1).Ни в t1.2, ни в t1.1.1 больше не осталось итераций, поэтому больше не разветвляются потоки.

Это оставляет нам 4 потока altoghether

1 голос
/ 02 апреля 2012

Обратите внимание, что поведение двух случаев в коммутаторе идентично: sleep (1), затем продолжить с циклом.Поскольку в вашем решении эти два поведения вели себя по-разному (один создал ребенка, а другой - нет), я бы сказал, что вы что-то упустили.

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