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()함수
- 사용하는 파일의 절대경로를 함수에 입력한다.
'컴퓨터공학기초 개념 > 시스템 프로그래밍' 카테고리의 다른 글
22. 프로세스 - copy on write (0) | 2021.09.16 |
---|---|
21. 프로세스 - wait & 쉘 만들기 (0) | 2021.09.16 |
19. 프로세스 - 프로세스 생성(fork) (0) | 2021.09.15 |
18. 프로세스 - 시스템 콜 (0) | 2021.09.15 |
17. 프로세스 - 프로세스 ID (0) | 2021.09.15 |
댓글