기본 색인 | 섹션 2 | English | 日本語 | Deutsch | 옵션 |
인터프리터 파일은 다음의 형식의 행으로 개시합니다.
#! 인터프리터 [ arg]
인터프리터 파일이 execve 될 때, 시스템은 실제로는 지정의 인터프리터 (을)를 execve 합니다. 옵션의 arg 하지만 지정되어 있는 경우, 그것은 인터프리터 의 1번째의 인수에 되어, 원래의 execve 그리고 지정된 파일의 이름은 2 번째의 인수가 됩니다. 그 이외에서는 execve 그리고 지정된 파일의 이름이 1번째의 인수가 됩니다. 원래의 인수는 쉬프트 되어 후속의 인수에 됩니다. 0 번째의 인수는 지정되었다 인터프리터 (으)로 설정됩니다.
인수 argv (은)는, 눌로 종료하는 캐릭터 포인터의 배열을 가리키는 포인터입니다. 각 캐릭터 포인터는 눌 캐릭터로 종료하는 캐릭터 라인을 가리킵니다. 이러한 캐릭터 라인은, 새로운 프로세스로부터 참조할 수 있는 인수 리스트를 구성합니다. 적어도 1 개의 인수가 배열내에 존재하고 있을 필요가 있습니다. 관습에서는, 최초의 요소가 실행된 프로그램의 이름이 될 것입니다 (예를 들어, path 의 마지막 원가요소).
인수 envp 도, 눌로 종료하는 캐릭터 포인터의 배열을 가리키는 포인터입니다. 각 캐릭터 포인터는 눌 캐릭터로 종료하는 캐릭터 라인을 가리킵니다. 이 배열을 가리키는 포인터는, 통상, 글로벌 변수 environ 에 보존됩니다. 이러한 캐릭터 라인은, 인수로서 명령에 직접 건네받지 않는 정보를 새로운 프로세스에 건네줍니다 (environ(7) (을)를 참조).
호출 프로세스 이미지내에서 오픈되고 있는 파일 기술자는, 새로운 프로세스 이미지 중(안)에서도 오픈된대로 입니다. 그러나, close-on-exec 플래그가 설정되어 있는 것은 예외입니다. (close(2) (와)과 fcntl(2) (을)를 참조). 오픈된 채로의 기술자는 execve() 의 영향을 받지 않습니다.
호출 프로세스로 무시하도록(듯이) 설정된 시그널은, 새로운 프로세스내에서도 무시되도록(듯이) 설정됩니다. 호출 프로세스 이미지내에서 포착되도록(듯이) 설정된 시그널은, 새로운 프로세스 이미지내에서 디폴트의 액션에 설정됩니다. 블록 된 시그널은, 시그널 액션의 변화 (와)는 관계없는 것으로 블록 된 채로 있습니다. 시그널 스택은 미정도리에 리셋트 됩니다 (상세한 것에 대하여는 sigaction(2) (을)를 참조해 주세요).
새로운 프로세스 이미지 파일에 set-user-ID 모드 비트 하지만 설정되어 있는 경우 (chmod(2) (을)를 참조), 새로운 프로세스 이미지의 실효 유저 ID 는, 새로운 프로세스 이미지 파일의 소유자 ID 로 설정됩니다. 새로운 프로세스 이미지 파일에 set-group-ID 모드 비트가 설정되어 있는 경우, 새로운 프로세스 이미지의 실효 그룹 ID 는 새롭다 프로세스 이미지 파일의 그룹 ID 로 설정됩니다 (실효 그룹 ID 는 그룹 리스트의 최초의 요소입니다). 새로운 프로세스의 열매 유저 ID, 열매 그룹 ID, 및 그 외의 그룹 ID 는, 호출 프로세스 이미지와 같게 됩니다. set-user-ID 및 set-group-ID 처리의 뒤, 실효 유저 ID 는 saved set-user-ID 로서 기록되어 실효 그룹 ID 는 saved set-group-ID 로서 기록됩니다. 이러한 값은, 다음에 실효 ID 를 변경하는데 사용할 수 있습니다 (setuid(2) (을)를 참조).
해당하는 파일 시스템으로 nosuid 옵션이 유효한 경우, 또는 새로운 프로세스 파일이 인터프리터 파일의 경우, set-ID 비트는 의미를 가지지 않습니다. 실효 ID 가 변경되었을 경우, 시스템 콜의 트레이스는 무효가 됩니다.
또, 새로운 프로세스는 호출해 프로세스로부터 다음의 속성을 계승합니다.
프로세스 ID | getpid(2) 를 참조 |
parent process ID | getppid(2) 를 참조 |
프로세스 그룹 ID | getpgrp(2) 를 참조 |
액세스 그룹 | getgroups(2) 를 참조 |
작업 디렉토리 | chdir(2) 를 참조 |
루트 디렉토리 | chroot(2) 를 참조 |
제어 단말 | termios(4) [영어] 를 참조 |
리소스의 사용 상황 | getrusage(2) 를 참조 |
인터벌 타이머 | getitimer(2) 를 참조 |
리소스의 사용 제한 | getrlimit(2) 를 참조 |
파일 모드 마스크 | umask(2) 를 참조 |
시그널 마스크 | sigvec(2),sigsetmask(2) 를 참조 |
execve() 호출의 결과로서 실행될 때, 프로그램은 다음과 같이 불려 갑니다.
main(argc, argv, envp) int argc; char **argv, **envp;
여기서, argc 하 argv 의 요소수 (``arg count'')이며, argv (은)는, 인수 자신을 가리키는 캐릭터 포인터의 배열을 가리킵니다.
[ENOTDIR] | |
패스의 원가요소중에 디렉토리 이외의 것이 포함되어 있습니다. | |
[ENAMETOOLONG] | |
패스명의 원가요소가 255 캐릭터를 넘고 있는지, 또는 패스명 전체가 1023 캐릭터를 넘고 있습니다. | |
[ENAMETOOLONG] | |
인타프리트 되는 스크립트를 기동할 경우에, 인터프리터의 이름이 MAXSHELLCMDLEN 캐릭터를 넘고 있습니다. | |
[ENOENT] | |
새로운 프로세스 파일이 존재하지 않습니다. | |
[ELOOP] | |
패스명을 변환할 경우에 검출된 기호 연결이 너무 많습니다. | |
[EACCES] | |
지정된 패스에는, 검색이 허가되어 있지 않은 디렉토리가 포함되어 있습니다 | |
[EACCES] | |
새로운 프로세스 파일이 통상의 파일이 아닙니다. | |
[EACCES] | |
새로운 프로세스 파일은, 실행이 허가되고 있지 않습니다. | |
[ENOEXEC] | |
새로운 프로세스 파일에 적절한 액세스 허가가 있습니다만, 헤더의 매직 번호가 무효입니다. | |
[ETXTBSY] | |
새로운 프로세스 파일은 순수한 수속 (공유 텍스트) 파일로, 현시점에서 다른 프로세스에 의해 기록 또는 읽기용으로 오픈되고 있습니다. | |
[ENOMEM] | |
새로운 프로세스는, 용서되었다 (getrlimit(2) 로 부과된 최대치) 이상의 가상 메모리를 필요로 합니다. | |
[E2BIG] | |
새로운 프로세스의 인수 리스트의 바이트수가 시스템의 부과한 상한을 넘고 있습니다. 이 상한은, sysctl(3) 의 MIB 변수 KERN_ARGMAX 에 의해 지정됩니다. | |
[EFAULT] | |
새로운 프로세스 파일은, 헤더내의 사이즈치로 나타나는 만큼 길게 없습니다. | |
[EFAULT] | |
path, argv, 또는 envp 하지만 올바르지 않은 주소를 가리키고 있습니다. | |
[EIO] | 파일 시스템으로부터 독해간에 입출력 에러가 발생했습니다. |
EXECVE (2) | June 1, 1994 |
기본 색인 | 섹션 2 | English | 日本語 | Deutsch | 옵션 |
Ben Bullock이 유닉스 매뉴얼 페이지에서 서비스에 대한 의견을 주시기 바랍니다. Privacy policy.
“ | There are 10 types of people in the world: those who understand binary, and those who don't. | ” |