exec 함수

프로세스가 하던 작업을 종료하고 다른 작읍을 하도록 전혼할 때 exec 계열의 함수를 사용한다. exec 함수를 호출하면 현재 실행 중이던 프로세스의 이미지를 새로운 프로세스의 이미지로 교체한다. 즉, 현재 실행중인 프로세스의 메모리를 다른 프로세스를 위해 사용한다. 따라서 현재 실행중인 프로세스는 종료되며 exec 함수의 인자로 받은 새로운 프로세스가 실행되기 시작한다.

예를 들어 현재 실행중인 프로세스를 종료하고 "ls test.txt" 명령을 수행하도록 하는 코드이다.
execl("/bin/ls", "ls", "test.txt", NULL);
execl() 함수의 첫번째 인자는 실행시킬 함수의 경로, 두번째 인자는 실행시킬 함수명, 세번째 인자는 함수 실행시 전달할 인자, 네번째 인자는 환경변수를 잔달하는 데 사용된다.

위에서는 exec 함수 실행에 필요한 인자들을 리스트 형태로 주기 위해서 exec 계역의 함수중 execl()을 사용하였다. exec 계열의 함수는 인자 형태에 따라 여섯 종료가 있으며 이들은 모두 비슷한 기능을 수행하기 때문에 이들을 모두 exec 계열 함수라고 부른다. 아래에 exec 계열의 함수들을 소개했다.

#include <unistd.h>
int execl(const char *path, const char *arg, ...);
int execv(const char *path, const *const argv[]);
int execle(const char *path, const char *arg, ..., char *const envp[]);
int execve(const char *path, char *const argv[], char *const envp[]);
int execlp(const char *file, const char *arg, ...);
int execvp(const char *file, char *const argv[]);

exec 뒤의 문자 l, v, p, e의 의미는 각각 다음과 같다.

l  : list 형태의 인자를 취한다는 의미
v : vector 형태의 인자를 취한다는 의미
p : 명령을 PATH에서 검색하겠다는 의미
e : 환경 변수 인자를 받는 함수임을 의미

아래는 vector 형태로 인자를 사용하는 예이다.
char *argv[] = {"ls", "test.txt", NULL};
execv("/bin/ls", argv);

'Basic Security > _Programming' 카테고리의 다른 글

[MFC] 응용 프로그램 구조 분석  (0) 2007.04.25
[MFC] 각 클래스 포인터 얻어오기  (0) 2007.04.25
exec()  (3) 2007.04.15
프로세스의 환경변수( getenv(), environ )  (0) 2007.04.15
프로세스 종료( exit(), atexit(), flush() )  (0) 2007.04.15
getrlimit()  (0) 2007.04.13
Posted by Proneer

댓글을 달아 주세요

  1. 참고 자료로 사용하였습니다.^^

    2008.10.25 14:59 신고 [ ADDR : EDIT/ DEL : REPLY ]
  2. pwh

    참고 자료로 사용하도록 퍼가도 될까요?

    2010.01.20 16:41 신고 [ ADDR : EDIT/ DEL : REPLY ]