2016-04-22 2 views
0

У меня есть немой вопрос, рассматривающий учебник по операционной системе. Вопрос ниже:
Предположим, что все системные вызовы fork успешны. После выполнения программы, показанной ниже. Сколько строк на экране?
Я предполагаю, что каждый вызов fork удваивает процессы, поэтому результат должен состоять из 16 процессов. Но когда я набираю тот же код из учебника, у меня есть 30 строк. Вот результат и код:
http://imgur.com/zrdOP0XСколько процессов создано после четырех fork() в Linux?

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

int main(){ 
    fork(); 
    printf("After fork1\n"); 
    fork(); 
    printf("After fork2\n"); 
    fork(); 
    printf("After fork3\n"); 
    fork(); 
    printf("After fork4\n"); 
} 
+2

Разветвляющихся вилки вилок. –

+0

Что такое 2 + 4 + 8 + 16? – Peter

ответ

0

результат должен быть такой:

fork1 fork2 fork3 fork4 fork4 fork3 fork4 fork4
fork2 fork3 fork4 fork4 fork3 fork4 fork4 fork1 fork2 fork3 fork4 fork4 fork3 fork4 fork4
fork2 fork3 fork4 fork4 fork3 fork4 fork4

(пространства только для лучшего чтения)

3

Но когда я набираю тот же код из учебника, я получил 30 линий

Это нормально:

  • После fork 1 у вас есть 2 процесса, поэтому записаны 2 строки,
  • После fork 2, вы h пр 4 процесса, так 4 строки написаны,
  • После вилки 3, вы имеете 8 процесса, так 8 строк написаны,
  • После вилки 4, у Вас есть 16 процесс, поэтому 16 строк написаны,

2 + 4 + 8 + 16 равно 30: у вас есть 30 строк.

Смежные вопросы