본문 바로가기
linux

프로세스 이미지 대체하기

by 상레알 2010. 8. 15.
프로세스 생성을 위한 저수준 인터페이스로 exec 가 있다.

exec 함수라는 것은 사실 이름이 exec로 시작되는 일단의 함수들을 통칭한 것이다. 이 함수들은 모두 새 프로세스를 띄우는 일을 하되, 프로세스를 띄우는 방식이나 프로그램 인수들을 제공하는 방식은 서로 다르다. exec함수들은 현재 프로세스를 path 또는 file 인수로 지정된 프로그램의 새 프로세스로 대체한다. exec 함수들을 이용하면 현재 프로그램의 실행을 다른 프로그램에게 넘겨 줄 수 있다.
예를 들면 한 프로그램이 사용자의 신원을 점검한 후에 제한된 사용 방침을 가진 다른 어떤 프로그램에게 실행을 넘겨주는 등의 시나리오가 가능하다. exec 함수들의 경우 새 프로그램이 시작된 후에는 원래의 프로그램이 더 이상 실행될 필요가 없다는 점에서 system 함수보다 월씬 효율적이다.

#include <unistd.h>

char **environ;

int execl (const char *path, const char *arg(), ,,,,(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 8const argv[]);
int execve(const char *path, char *const argv[], char *const envp[]);

이 함수들ㅇ느 프로그램 인수들을 받는 방식에 따라 두 종류로 나뉜다. execl, execlp, execle3는 널 포인터로 끝나는 가변적 개수의 매개 변수들을 통해서 프로그램 인수들을 받는다.
반면 execv, execvp, execve 함수는 문자열 배열 매개변수를 통해서 프로그램 인수들을 받는다. 두 종류 모두, 해당 프로그램 인수들이 새 프로세스의 main 함수의 argv 배열로 전달된다.

일반적으로 execve를 제외한 나머지 함수들은 execve를 적절히 호출하는 형태로 구현되나 반드시 그래야 한다는 조항이 있는 것은 아니다.

이름이 p로 끝나는 함수들은 주어진 프로그램 실행 파일을 PATH 환경 변수에 설정된 경로들에서 찾는다. 만일 경로들에 있는 것이 아닌 프로그램을 실행하는 경우라면 디렉터리들을 포함한 절대 경로를 지정해야 한다.

전역변수 environ을 이용해서 새 프로세스의 프로그램 환경에 넘겨줄 환경 변수들을 설정할 수 있다. 또한 e로 끝나는 함수들에서는 마지막 매개변수로 프로그램 환경을 담은 문자열 배열을 지정할 수 있다.



'linux' 카테고리의 다른 글

데몬(demon) 슈퍼데몬 (xinnetd)  (0) 2010.12.08
스레드  (0) 2010.08.17
입출력 재지정  (0) 2010.08.17
좀비 프로세스  (0) 2010.08.17
프로세스 이미지 복제  (0) 2010.08.15
새 프로세스 시작하기  (0) 2010.08.15
프로세스 일정 관리  (0) 2010.08.14
프로세스와 신호  (0) 2010.08.13
vim 설정  (0) 2010.06.30
모듈의 상호참조  (0) 2010.06.03