본문 바로가기

소프트웨어/C/C++

c] 프로세스 복제 fork

리눅스기준.

fork는 현재 실행중인 process를 복제한다. fork가 걸린 순간 프로세스가 분기(맞는 표현인가?)하기 때문에 context가 복제된 process가 생긴다. 



소스

#include
#include
#include

int main(int argc, char **argv) {
	int pid;
	
	pid = fork(); //fork로 프로세스 복사

	if(pid>0) { //PID가 0보다 크면 부모
		printf("parents, pid=%d\n",pid);
		getchar(); //자식생겨고 엔터쳐야 끝나게 걸어놓은것
	}else if(pid==0) { //PID가 0과 같으면 자식 프로세스
		printf("children\n");
	}else if(pid==-1) { //PID가 -1이면 fork err
		perror("fork err : ");
	}	

	return 0;
}

위의 소스에서 보면 fork() 함수가 걸린 순간 process 복제가 일어난다. 우선 진행중이던 부모는 pid가 0보다 크기 때문에 parents를 출력한다. 그리고 그 후 복제된 프로세스는 pid가 0이기 때문에 children을 출력한다.


즉,

int fork()가 

0보다 크다 => 부모

0이다 => 복제된 자식

-1이다 => fork 실패


출력은 아래와 같다.