본문 바로가기

컴퓨터/언어,프로그래밍

fork는 새로운 child Process를 실행 하는데 사용 합니다.

fork는 새로운 프로세스를 생성 하기 위한 function입니다.
새로운 프로세스(Child Process)는 fork를 실행 한 Process의
모든것을 그대로 복사 하여 가지고 있습니다.

포크는 멀티프로세싱을 하기 위한 기본입니다.
즉 프로그램에서 동시에 여러가지 일을 수행 하기 위한
기본적인 명령어 인것 입니다.

쉬운 예로 Web Server를 살펴 봅시다.

Web Server는 동시에 적게는 몇명 많게는 몇천명의 사용자를
동시에 처리 해야 합니다. 이를 위해서 Web Server는 다음과 같이 구성 됩니다.


1. 사용자 Request를 기다림
2. 사용자 Request가 들어오면
3. fork를 수행
4. 만일 fork를 수행 한 Process면 1번으로 감. (다른 request를 처리 하기 위함이죠)
5. fork로 새롭게 생성된 Process라면 사용자의 Request를 읽어 해당 Action을 취함. 그리고 모든것이 처리 완료 되면 소멸


exec또는 execl은 fork와는 조금 다릅니다.
exec나 execl은 새로운 Process를 생성 하는데 기존의 Program을 실행 합니다.
즉 exec는 입력 변수로 시스템상의 Program path를 입력 받고
새로운 Process를 생성 하는데 그 Process는 기존에 시스템 내에 있던
Program중 하나를 실행 하는 것입니다.



프로그램에서 fork()문장을 만나면 프로세스(프로그램이 run되고 있는 상태)가 똑 같은 것이 복사됩니다. 복사된 프로세스를 child process라 부르죠.

지금 보시고 있는 화면(웹브라우져)의 상단 메뉴바에서 "파일>새로만들기>창"을 클릭해보면 똑같은 화면이 생겨납니다. Netscape나 MS Explorer 프로그램안에서 fork()를 사용한 예입니다.

프로그램에서 execl(new_program,param1,param2,param3... (char *)0)을 만나면 새로운 프로세스를 만들고 이 프로세스에서 new_program이 run됩니다. 이때 생긴 새로운 프로세스도 child process입니다.
인터넷에서 회원가입할 때 우편번호 찾기를 누르면 새창이 뜨지요. 이런 것이 바로 execl을 사용한 예입니다.

즉 Netscape나 MS Explorer와 같은 프로그램을 직접 만든다면 fork()나 execl()과 같은 함수를 사용해야겠지요.
제주삼다수, 2L,... 오뚜기 진라면 매운... 상하목장 유기농 흰... 남양 프렌치카페 카... 고려인삼유통 홍삼 ... 종근당건강 오메가3... 요이치 카링 유무선...