본문 바로가기
컴퓨터공학기초 개념/시스템 프로그래밍

20. 프로세스 - 프로세스 생성(exec)

by devraphy 2021. 9. 15.

1. exec() - 프로세스를 생성하는 방법 

- exec() 시스템 콜을 호출한 프로세스의 Text, BSS, Data 공간에 새로운 프로세스에서 사용할 코드 이미지를 덮어씌운다. 

- 별도의 프로세스를 생성하는 방식이 아니라, 기존의 프로세스를 재활용하는 방식으로 새로운 프로세스를 생성한다. 


2. exec() 시스템 콜의 원형

- exec() 함수는 기존의 프로세스의 공간을 재활용 하는 방식으로, Text, BSS, DATA영역을 재활용 한다. 

- 그러므로 parameter를 통해 덮어씌울 데이터를 입력받는다. 

- 하나씩 알아보자.

 

a) execl() 시스템 콜의 구조

excel("파일의 절대주소", "argv[0]", "argv[1]", ... , NULL(

- argv는 arguement를 의미하는 것이다. 필요한 만큼 입력할 수 있다. 

- 가장 첫번째 인자인 파일을 대상으로 수행할 명령어를 argv에 입력한다.  

- 그리고 가장 마지막에는 NULL을 입력한다. 

- 다음 예제를 보면 더욱 이해가 쉬울 것이다. 

 

b) execl() 시스템콜의 예시

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
   printf("execute ls\n");
   execl("/bin/ls", "ls", "-l", NULL);
   perror("execl is failed\n");
   exit(1);
}

- 위의 코드는 기존의 프로세스(main())에서 excel() 함수를 통해, /bin/ls 파일에 대해서 ls -l 명령을 수행한 결과다. 

 

 

c) execl()과 execlp()의 차이점 

- execlp() 함수는 절대주소로 파일을 명시하지 않고 PATH 변수를 조회하여 파일 이름을 검색한다. 

- 다만, 반드시 해당 파일이 PATH 변수에 등록되어 있어야 한다. 

 

 

d) execle() 함수

- execle() 함수는 PATH 변수를 바로 지정하여 사용하는 방식이다. 

- PATH 환경변수를 사용하지 않고 절대주소를 사용하는 execl() 함수와 다르게, 

- PATH 환경변수만을 조회해서 사용하는 execlp() 함수와는 다르게, 

- execle()함수는 envp라는 변수를 사용하여 시스템콜을 사용하기 직전에 PATH를 설정하여 사용하는 방식이다.

 

 

e) execv(), execvp(), execve() 함수

- 앞서 배운 execl(), execpl(), execle()와 동일한 기능을 한다. 

- 다만, parameter(인자)를 다루는 방식이 다르다. 

 

- 앞서 배운 3가지 함수 execl(), execpl(), execle()에서는 함수 내부에 인자를 직접 작성하였다. 

- 하지만 execv(), execvp(), execve()에서는 함수 외부에 변수로서 정의하여 사용하는 방식이다.

 


3. exec() 시스템 콜 정리

- exec() 시스템콜을 정리하면 다음과 같다. 

 

▶ p로 끝나는 exec() 함수 

   - PATH 환경변수를 조회하기에 파일명만 함수 내부에 입력한다. 

 

▶ e로 끝나는 exec() 함수

   - PATH 환경변수를 미리 정의하는 것이 아니라, envp라는 변수에 정의하여 함수의 인자로 사용한다.

 

▶ 그 외의 exec()함수

   - 사용하는 파일의 절대경로를 함수에 입력한다.  

댓글