모든 프로세스는 고유의 식별자(PID)를 갖으며, pid는 자기의 부모프로세스 식별자(PPID)를 갖는다.

fork는 새로운 프로세스를 생성하기 위한 함수 이다.

프로세스가 fork 함수를 만나면 현재 실행 중인 프로세스의 이미지를 그대로 복사해서 새로운 프로세스를 만든다.
이미지를 복사한다는 의미는 프로세스의 코드 부분은 물론, 전역변수, 지역변수 등 모든 실행 환경을 그대로 복사하는 것을 말한다.
이때 새로 생성된 프로세스를 자식 프로세스라 하고, fork 함수를 호출해서 자식 프로세스를 생성하는 프로세스를 부모 프로세스라고 한다.

부모와 자식 프로세스 간에 유일하게 다른 부분이 있다면 fork 함수를 호출하고 그 결과를 반환 받는 변수이다.


int pid;
pid = fork();

fork 함수가 복사하는 이미지에는 변수 pid도 포함된다.
그런데 fork 함수의 반환 값은 부모 프로세스와 자식 프로세스가 서로 다르다.
그래서 부모 프로세스의 변수 pid에는 자식 프로세스의 식별자가 저장되고, 자식 프로세스의 변수 pid에는 0이 저장된다.

하나의 프로그램으로 부모 프로세스와 자식 프로세스의 역할을 모두 구현해야한다.
때문에 프로세스에서 fork 함수를 호출한 후 반환되는 값을 보고 현재 프로세스가 부모 프로세스의 역할을 해야 하는지,
자식 프로세스의 역할을 해야 하는지를 구분하는 코딩이 필요하다.

 

int pid;

pid = fork();

if(pid >0)

{
     //부모 프로세스가 실행하는 코드
}

else if(pid == 0)

{
     //자식 프로세스가 실행하는 코드
}

else if(pid == -1)

{
     //오류 발생에 대비하는 코드
}


'P rogramming > C Language' 카테고리의 다른 글

Malloc(동적 메모리 할당) vs Array(배열)  (0) 2011.06.01
전처리기  (0) 2011.04.19
바이트 순서 변환 함수 (ntohl, ntohs, htonl, htons)  (0) 2011.04.13
execl(), execv() - 프로세스 생성  (3) 2011.04.05
SDL Function  (0) 2011.03.24
by 민트앤라떼 2011. 3. 28. 10:58