Linux에서는 두가지 목적으로 process 가 생성됩니다.
(ex. web서버처럼 리퀘스트가 여러 개 들어왔을 때 동시에 처리.)
시스템내부에서는 clone()과 execve() 시스템콜을 호출한다.
같은 프로그램의 처리를 여러 개의 프로세스가 나눠서 처리한다(1번 목표)에는 fork() 함수가 사용된다. fork() 함수를 실행하면 실행한 프로세스와 함께 새로운 프로세스가 1개 생성된다.
생성전의 프로세스를 부모프로세스라고 하며 생성된 프로세스는 자식 프로세스라고 합니다.
프로세스를 생성하는 순서는 다음과 같다.
전혀 다른 프로그램을 생성할때는 execve() 함수를 이용한다.
즉, 프로세스 숫자가 증가하는것이 아니라. 기존의 프로세스를 별도의 프로세스로 변경하는 방식이다.
실행파일을 읽고 프로세스의 메모리 맵에 필요한 정보들을 읽어온다. 실행 파일은 프로세스의 실행중 코드와 데이터 이외에도 데이터 영역에 offset size, 메모리 맵 시작주소, 변수 등에서의 데이터 영역 정보, 최초로 실행할 명령의 메모리주소
메모리 맵 시작주소가 필요한 이유는 cpu에서 사용하는 기계언어는 메모리 맵 시작주소가 필요하기 때문이다.
전혀 다른 프로세스를 생성할 경우 fork and exec 방식을 주로 사용합니다.