프로세스 생성에 관해서 궁금한 점이 있습니다.

rainbow2316의 이미지

운영체제를 공부하면서 어떤 예제글이 있어서 따라해보았습니다.

#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
 
int gval;
 
int main(void)
{
	int status;;
	if(fork()!=0)
	{
		waitpid(-1,&status,0);
	}
	else
	{
		X(2);
		exit(0);
	}
	printf("%d\n", gval);
	return 0;
}
 
void X(int i)
{
	gval = i;
}

여기서 제가 공부해서 알기론 fork()를 해서 0이 아니면 이건 부모 프로세스고

밑에 있는 else 즉 fork() 해서 나온 값이 0 이면 자식 프로세서로 알고 있습니다.

소스는 이해를 했습니다. waitpid 는 자식 프로세스가 종료될 때 까지 기다리는 코드이고

그리고 X(1) X(2)는 전역변수 gval 에 부모프로세스 가 1을 넣고 자식 프로세스가 2를 넣고

근데 궁금한건 프린트문을 써서 gval의 값을 출력하면 왜 부모프로세스가 넣은 값이 나오는 건지 궁금합니다.

이건 컴퓨터의 컴파일러마다 다르게 나오는 것입니까. ?