본문 바로가기

아이티/유닉스

fork()란 무엇인가?

 fork() 함수는 유닉스 운영체제의 프로세스 생성 함수이다.

한 프로그램 안에서 fork() 함수를 사용하면 그 프로그램과 똑같은 프로세스가 만들어진다. 이 fork() 함수를 호출한 프로세스를 parent 프로세스라고 하고, 이 fork() 함수에 의해 만들어진 프로세스를 child process라고 한다. 이 parent process와 child process는 동일한 내용의 코드이다. 심지어 PC(Program Counter) 또한 똑같이 복사되기 때문에 parent process와 child process는 fork() 함수를 호출하는 순간 프로그램 내에서 같은 명령어 부터 수행하게 된다. 이때, 프로그램 안에서 if문을 사용하여 부모 프로세스인지 자식 프로세스인지 구분하여 원하는 방향으로 프로그래밍 할 수 있다. 즉 fork() 함수는 이미 만들어져 있는 프로세스를 사용하여 프로그래밍 하기 위한 기법이라 할 수 있다.

 

fork.c

위 fork.c 코드 내용을 보면 fork() 함수를 사용하고 있다. 이 fork() 함수는 리턴할때 int값을 반환하는데, 음수면 에러가 발생했음을 뜻하고, 0이면 child process, 양수면 parent process를 뜻한다. 이를 통하여 if문으로 분기를 주어 프로그래밍 하는 것이다. child process에서 사용된 execlp 명령어는 명령 수행 직후 프로세스를 종료한다. parent process에서 사용된 wait 명령어는 child process가 끝날때 까지 대기하는 명렁어다.

 

./fork