2015-07-04 3 views
0

Я написал простой пример fork(), как показано ниже:Weird поведения при выполнении методы вилки()

#include <sys/types.h> 
void main() 
{ 

     printf("Stack overflow\n"); 
     pid_t p = fork(); 
     if (p) 
      printf("I am parent\n"); 
     else 
      printf("I am child\n"); 
     return 0; 
} 

В идеале, «переполнение стека» должно быть напечатано только один раз, но в моем конце строка печатается дважды. Я не могу это понять. Может ли кто-нибудь помочь?

+0

Возможно, вы захотите добавить '# includes' в начале этого. Я предполагаю, что вы используете 'unistd.h' (fork) и' stdio.h' (для printf), но могут быть другие реализации, которые вы используете, и это, конечно, может изменить поведение. –

ответ

1

Это проблема с промывкой: ваша программа работает нормально, но выход первого printf передается только на стандартный выход после того, как произошло событие fork.

Попробуйте

fflush(stdout); 

перед тем разветвление. Это исправляет это.

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