아래 http://forum.falinux.com/zbxe/?document_srl=412814 의 Fork 함수 예제에서

 

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

int main()
{
   int   counter  = 0;
   pid_t pid;

   printf( "작식 프로세스 생성");
   pid   = fork();

   switch( pid)
   {
      case -1  :
      {
         printf( "자식 프로세스 생성 실패\n");
         return -1;
      }
      case 0   :
      {
         printf( "저는 자식 프로세스로 디스카운트하겠습니다.\n");
         while( 1 )
         {
            printf( "자식: %d\n", counter--);
            sleep( 1);
         }
      }
      default  :
      {
         printf( "저는 부모 프로세스로 카운트하겠습니다.\n");
         printf( "자식 프로세스의 pid는 %d입니다.\n", pid);
         while( 1 )
         {
            printf( "부모: %d\n", counter++);
            sleep( 1);
         }
      }
   }
}
이 예제에서 fork 이전의 printf 문이 두번 수행 된 것 처럼 출력이 두번 됩니다..

 printf( "작식 프로세스 생성");
요부분 을

 printf( "작식 프로세스 생성\n");

로 수정하면 한번만 수행 합니다.

"새로운 프로세스를 생성하면, 그 프로세스의 맨 윗부분 #include 전처리 부분부터 시작하는 것이 아니라, fork함수가 호출된 그 소스의 위치에서부터 시작하게 된다.(메인 스레드가 fork 에서부터 시작) "라고

알고 있는데.

fork로 프로세스 분기가 일어나기전에 printf 출력이 두번 찍혀서요.

왜 이런 현상이 일어나는 건지 궁금해요.