본문 바로가기

os/리눅스

fork() 함수에 대해서..

Race Condition 문서를 읽으면 어김없이 나올수 밖에 없는 함수.

헤더    unistd.h 
형태    pid_t fork(void);  
반환    pid_t 실행에
 실패하면 -1 을 반환. 부모에게는 새로 생성된 자식 프로세스 PID가 반환
          되며, 자식 프로세스에는 0이 반환됩니다. 


fork()함수에 의해서 생성된 프로세서는 부모의 모든 값을 그대로 이어 받지만 프로세서 아이

디만이 틀릴뿐이다. fork()함수는 0으로 자식프로세서에게 아이디를 부여한다.

그러면 첫번째 자식 프로세서는 0이면 두번째 자식은 몇이 올것인가? 라는 문제의 식이다.

간단하게 프로그램을 짜보면 

과연 결과값이 어떻게 나올것인지 곰곰히 생각해봐야한다.(처음이니까~)


결과가 어떠한가!! 

처음엔 부모 프로세서가 다 돌고 두번째로 생성된 프로세서가 돌고 마지막엔 첫번째 프로세서

가 실행되는것을 볼수 있다. 결국 자식의 자식이 아닌 그저 다른 자식일 뿐이다. 

그리고 그 또한 스택 영역으로 들어간다.(늦게 들어갔기 때문에 두번째 자식이 먼저 실행된다)

그 자식 프로세서도 0으로 되는것이다. 

단순히 새로운 프로세서를 생성하고 분기하는것일뿐(동인한 프로세서로 분기) 이다.

대략적으로 그림으로 보자면 요론 그림으로~


!! 쓰레드와 무슨차이인가요??

라고 물어본다면 당연히 프로세서는 프로그램을 실행하기 위한 하나의 단위이다.

쓰레드는 프로세서안에서 실행하기 위한 단위라고 생각하면 된다.

여러 쓰레드가 모여서 프로세서를 만들고 쓰레드는 오직 프로세서 안에서만 존재한다.

fork()는 프로세서를 만드는것이지(복사하는것) 동시에 돌아가지는 않는다.

쓰레드를 쓰는이유는 동시에 처리하기 위함이니까 전혀 틀리게 된다.






'os > 리눅스' 카테고리의 다른 글

unlink()  (0) 2009.11.02
Race Condition  (0) 2009.10.31
/var/lib/dpkg/lock 잠근 파일을 얻을 수 없습니다. 에러~  (0) 2009.10.30
리눅스 사용자 추가, 삭제  (0) 2009.10.28
보안을 위해서~ Apache, PHP 버전 감추기  (0) 2009.10.28