도와주세요!!
아래 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 출력이 두번 찍혀서요.
왜 이런 현상이 일어나는 건지 궁금해요.
printf( "작식 프로세스 생성");
fflush(stdout);
pid = fork();
요롯게 해보셔요~