Определение количества процессов, запущенных с использованием fork - PullRequest
0 голосов
/ 03 октября 2019

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

Спасибо

void run_morecompute(int i){
   printf("hello world");
}
void run_compute(int i) {
    int cpid = fork();
    if (cpid == 0)
    run_morecompute(i);
}

int main (){
   int pid;
   for (int i = 0; i < 4; i++) {
      pid = fork();
      if (pid == 0){
        printf("\n%d",i);
        run_compute(i);
      }
   }
}

1 Ответ

0 голосов
/ 03 октября 2019

Если вы измените

printf("hello world");

на

printf("hello world from %d", getpid());

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

Я бы предложил изменить цикл в main, чтобы просто вызывать run_morecompute () до тех пор, пока вы не поймете, что происходит. Дополнительный fork () в run_compute () усложняет ситуацию.

Процесс верхнего уровня разветвляется на 4 дочерних процесса, которые вызывают run_compute (). Затем эти 4 ребенка становятся родителями и разворачивают еще 3 детей. Затем эти 12 детей запускают еще 2 процесса каждый ... и т. Д.

Надеюсь, это поможет.

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