프로세스 이미지 대체하기
#include <unistd.h>
char **environ;
int execl (const char *path, const char *arg0, ..., (char *)0);
int execlp (const char *file, const char *arg0, ..., (char *)0);
int execle (const char *path, const char *arg0, ..., (char *)0, char llconst envp[]);
int execv (const char *path, char *const argv[]);
int execvp (const char *file, char *const argv[]);
int execl (const char *path, char *const argv[], char *const evnp[]);
- execl, execlp, execle는 널 포인터로 끝나는 가변적인 개수의 매개변수들을 통해서 프로그램 인수들을 받는다.
- execv, execp, execl은 문자열 배열 매개변수를 통해 프로그램 인수를 받는다.
- 두 종류 모두 main 함수의 argv 배열로 전달된다.
- p로 끝나는 함수들은 주어진 프로그램 실행 파일을 PATH 환경 변수에 설정된 경로들에서 찾는다. 그렇기 때문에 경로에 있는 것이 아닌 프로그램을 실행한다면 절대경로를 지정해야한다.
- e로 끝나는 함수들에게서는 마지막 매개변수로 프로그램 환경을 담은 문자열 배열을 지정할 수 있다.
소스
실행결과 (아래만)
실행이 끝났는데도 "Done."이 출력되지 않는다. -> 이것이 바로 system과 다른점!!! 실행이 끝나도 제어권이 해당 프로그램으로 돌아오지 않는다!!
그래서 새 프로세스의 PID는 원래의 PID와 동일! 무모 PID나 예의 바름 값도 동일!
exec로 프로세스를 띄울 때는 인수목록과 환경이 결합된 크기에 상한이 존재한다. 그 상한은 ARG_MAX로 정의 되는데 리눅스의 경우 128KB 이지만, 더 낮은 상한을 가진 시스템이 있을 수 있다. POSIX 명세가 요구하는 ARG_MAX 의 최소 값은 4096바이트이다.
exec 함수들은 오류가 발생할 때만 반환되고, 오류가 발생하면 errno가 설정되며 -1을 반환한다.
'개발 > Linux' 카테고리의 다른 글
프로세스와 신호 - 프로세스 종료 기다리기 (0) | 2014.11.07 |
---|---|
프로세스와 신호 - 프로세스 이미지 복제 (0) | 2014.11.07 |
프로세스와 신호 - 새 프로세스 시작하기 (0) | 2014.11.07 |
프로세스와 신호 - 프로세스 일정 관리 (0) | 2014.11.06 |
프로세스와 신호 - 시스템 프로세스들 (0) | 2014.11.06 |