execve

Autres langues

Langue: ko

Version: 1997년 11월 3일 (fedora - 25/11/07)

Section: 2 (Appels système)

이름

execve - 프로그램을 실행한다.

사용법

#include <unistd.h>

int execve (const char *filename, char *const argv [], char *const envp[]);

설명

execve()는 파일명에 의해 지정된 프로그램을 실행한다. 파일명은 바이너리실행이나 스크립트이어 야만한다. 후자의 경우, interpreter는 스크립트 자신이 아닌 실행을 위한 유효한 경로명이어야만 한다. argv는 새로운 프로그램은 통과하는 인수 문자열의 배열이다. envp는 진부하게도 key=value형태의 문자열 배열이다. 그것은 새로운 프로그램으로 환경처럼 전달된다. argvenvp는 모두 null포인터에 의해 종료되 어야만 한다. 인수 벡터와 환경은 호출된 프로그램의 main함수에 의해 접근될 수 있다. 그때 int main(int argc, char *argv[], char *envp[])와 같이 정의 된다. execve()는 성공적으로 반환하지 않는다.그리고 호출한 프로세스의 텍스트, 데이타, bss와 스택은 로드된 프로그램에 의해 덮어쓰기 된다. 프로그램은 호출한 프로세스의 PID와 모든 exec에 닫히게 설정하지 않은 열린 파일 디스크립터를 상속하게 한다. 모든 시그널은 호출 프로세스가 기본설정으로 재설정 되는 것에 의해 설정된다. 현재 프로그램이 추적되어지면, SIGTRAPexecve()후에 보내지게 된다. set-uid 비트가 파일명에 의해 지정된 프로그램 파일을 설정한다면 호출한 프로세스의 유효한 사용자 ID는 프로그램파일의 소유자가 바뀐다. 비슷하게, 프로그램 파일의 set-uid비트가 설정될때, 호출 프로세스의 유효한 그룹 ID는 프로그램 파일의 그룹으로 설정된다.

반환값

성공시, execve()는 반환되지 않고, 에러시 -1이 반환되고, errno 는 적절히 설정된다.

에러

EACCES
파일이나 스크립트 해석기는 정규파일이 아니다.
EACCES
실행 권한은 파이이나 스크립트 해석기에서 거부됐다.
EACCES
파일 시스템은 noexec 에 마운트됐다.
EPERM
파일시스템은 사용자가 슈퍼유저가 아닌 nosuid 에 마운트됐거나, 파일이 SUID나 SGID비트 설정을 갖는다.
EPERM
프로세스가 추적된다.
E2BIG
인수리스트가 너무 길다.
ENOEXEC
실행이 잘못된 아키텍처포맷을 인지하거나 몇개의 실행될 수 없음을 의미하는 다른 포맷에러를 갖는다.
EFAULT
파이명 이 당신이 접근 가능한 주소공간 밖을 가리킨다.
ENAMETOOLONG
파일명 이 너무길다.
ENOENT
파일명 이나 스크립트, ELF해석기가 없다.
ENOMEM
커널 메모리가 적다.
ENOTDIR
A component of the path prefix of 파일명 경로의 구성이 스크립트,ELF해석기가 디렉토리가 아니다.
EACCES
찾는 권한이 파일명 이나 스크립트 해석기의 이름의 경로에 구성을 거부한다.
ELOOP
너무 많은 심볼릭 링크가 있다.
ETXTBUSY
실행이 하나이상의 프로세스에 의한 기록을 위해 열렸다.
EIO
입출력 에러.
ENFILE
파일의 총갯수 제한에 다다랐다.
EMFILE
프로세스가 파일열기 최대값에 걸렸다.
EISDIR
ELF해석기가 디렉토리이다.
ELIBBAD
ELF해석기가 포맷을 인식할 수 없다.

호환

SVr4, SVID, X/OPEN, BSD 4.3. POSIX은 #!실행을 문서화 하지않았지만, 그 외에는 호환성이 있다. SVr4는 추가적인 에러상태 EAGAIN, EINTR, ELIBACC, ENOLINK, EMULTIHOP를 문서화했다; POSIX은 ETXTBSY, EPERM, EFAULT, ELOOP, EIO, ENFILE, EMFILE, EINVAL, EISDIR ,ELIBBAD 에러상태를 문서화하지 않았다.

주의

SUID와 SGID 프로세스들은 SUID 나 SGID를 ptrace()d않게 할 수 있다. 127문자 최대길이는 #! 실행 쉘 스크립트에서 첫행을 허가한다. 리눅스는 스크립트의 SUID와 SGID비트를 무시한다.

관련 항목

chmod(2), fork(2), execl(3), environ(5), ld.so(8)

역자

ASPLINUX<man@asp-linux.co.kr>, 2000년 7월 29일