본문 바로가기
CS/System Software

fork() vs clone()

by gamxong 2023. 3. 12.

clone 과 fork는 새로운 프로세스를 생성한다는 관점에서는 비슷합니다.

 

하지만 fork 는 사실 clone() 시스템 콜이 레이어드 되어 있는 라이브러리 함수입니다.

 

fork와는 다르게 clone()은 자식 프로세스가 실행 컨텍스트를 호출 프로세스와 공유할 수 있게 해준다.

예를들어 메모리 공간, 파일 디스크립터 테이블, 시그널 핸들러 테이블 등을 공유한다.

 

clone 의 주 사용처는 공유되는 메모리 공간에서 동시에 실행되는 쓰레드 구현이다.

자식 프로세스가 clone()으로 생성되면, 가장 처음 fn(arg)라는 함수를 호출한다. 이렇게 fn 을 호출하는 것은

fork와 다른데, 아시다시피 fork를 호출하고나서는 자식 프로세스는 fork 호출 시점부터 실행을 시작하기 때문이다.

 

fn argument는 실행 초반에 자식 프로세스로 부터 호출되는 함수에 대한 포인터이다.

 

fn 함수가 리턴하면, 자식 프로세스는 종료되게 된다. fn 의 리턴 값인 int 값은 자식 프로세스의 종료 코드이다.

자식 프로세스는 exit을 호출해서 명시적으로 종료하거나, fatal signal을 받고서 종료되게 된다.

'CS > System Software' 카테고리의 다른 글

좀비 프로세스 vs 고아 프로세스  (0) 2023.03.12
O_APPEND의 기능  (0) 2023.03.12
SRAM vs DRAM  (0) 2023.03.12
System call vs API  (1) 2023.03.12

댓글