강좌
클라우드/리눅스에 관한 강좌입니다.
자격증 분류

리눅스마스터2급강좌 : 자식 프로세스(process) 생성(fork)

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

 

리눅스마스터2급강좌 : 자식 프로세스(process) 생성(fork)

 

 

 

fork

 

자식 프로세스를 만든다.

 

 

 

 

리눅스 환경에서 사용자가 새로운 프로세스를 생성할 수 있는 방법은 두 가지가 있다.

 

 

 

 

첫 번째는 fork() 시스템 호출로, 어떤 프로세스가 자신의 사본을 생성하는 데 사용한다.

 

 

 

 

이때 fork()를 부른 프로세스를 부모 프로세스라 부르고, 새로 생성된 프로세스를 자식 프로세스라고 부른다.

 

 

 

 

이와 같은 방법은 프로세스의 수를 증가시키기 위한 전통적인 기법으로 fork() 후에는 두 개가 거의 동일한 프로세스인 부모(Parent)와 자식(Child)이 생긴다.

 

 

 

 

 

 

이 명령의 개요는 다음과 같다.

 

 

 

 

 

 

 

#include <unistd.h>

pid_t fork(void);

 

 

 

 

 

 

 

fork는 부모 프로세스와는 단지 PIDPPID만이 다른 자식 프로세스를 만든다.

 

 

 

 

그리고 자원 사용량을 0으로 맞춘다.

 

 

 

 

파일 록(lock)과 시그널 펜딩(pending)은 상속받지 않는다.

 

 

 

 

리눅스에서 forkcopy-on-wite 페이지들을 사용하여 수행되며, fork의 유일한 단점은 부모 프로세스의 페이지 테이블을 복사하고 자식 프로세스에 대한 task 구조체를 만들기 위해 필요한 시간과 메모리이다.

 

 

 

 

 

반환값

 

 

성공 시 자식 프로세스의 PID가 부모에게 리턴되며, 자식에게는 0이 리턴된다.

 

 

 

 

실패할 경우, -1이 부모에게 리턴되며, 자식은 생성되지 않는다.

 

 

 

 

그리고 errno는 적절한 값으로 설정된다.

 

 

 

에러

 

 

EAGAIN : 부모 프로세스의 페이지 테이블들을 복사하기 위한 충분한 메모리를 할당할 수 없거나 자식 프로세스를 위해 태스크 구조체를 할당할 수 없다.

 

 

 

 

 

ENOMEM : 메모리가 꽉 차서 필요한 커널 구조체를 할당할 수 없다.

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,035 명
  • 현재 강좌수 :  35,791 개
  • 현재 접속자 :  154 명