2016-03-18 3 views
-3

Предположим, у нас есть этот код:Системный вызов вилка()

int i; 

for(i=0; i<3; i++){ 
    fork(); 
} 
printf("Hello"); 
  1. Сколько раз "Hello" появится на экране?
  2. Дерево процессов: родительский и детский.

Я думаю, что он должен печатать «Привет» 4 раза.

+0

Это частый вопрос для интервью. Вы должны хотя бы попробовать запустить это приложение. –

ответ

2

Для каждого системного вызова, который вы создаете для создания клона текущего процесса. Таким образом, вы вызываете функцию fork 3 раза, что приведет к созданию 8 процессов. Расчет равен 2.

Если вы хотите напечатать сообщение «привет» 4 раза вам нужно изменить свой код:

int main() 
{ 
     int i; 

     for(i=0; i<2; i++){ 
       fork(); 
     } 
     printf("Hello\n\n"); 
} 

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

Используя этот код, вы можете создать n процессов, скажем, 4 и заставить отца ждать своего ребенка.

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

int main(int argc, char *argv[]) 
{ 
     int pid, i; 
     for(i=0; i<4; i++) 
     { 
       if ((pid = fork()) == -1) { 
         perror(argv[0]); 
         exit(1); 
       } 
       if (pid == 0) { 
         printf("\n\nHello\n\n"); 
         exit(0); 
       } else { 
         wait(NULL); 
       } 
     } 
} 
Смежные вопросы