EXECVE 2
目录
EXECVE
NAMEæ»è§ (SYNOPSIS)
æè¿° (DESCRIPTION)
è¿åå¼ (RETURN VALUE)
é误 (ERRORS)
CONFORMING TO
注æ (NOTES)
å¦è§ (SEE ALSO)
[䏿çç»´æ¤äºº]
[ä¸æçææ°æ´æ°]
ãä¸å½Linux论åmanæå页翻è¯è®¡åã
è·
NAME
execve - æ§è¡ç¨åº
æ»è§ (SYNOPSIS)
#include <unistd.h>
int execve (const char *filename, char *const argv [], char *const envp[]);
æè¿° (DESCRIPTION)
execve() æ§è¡ filename æåºç ç¨åº. filename å¿é¡» æ¯ äºè¿å¶å¯æ§è¡æä»¶, æè 以 "#! interpreter [arg]" è¡ å¼å§ç èæ¬æä»¶. åèç interpreter å¿é¡»æ¯ æä¸ª 坿§è¡æä»¶ ç ææ è·¯å¾, è¿ä¸ª 坿§è¡æä»¶ èªèº« ä¸è½æ¯ èæ¬ç¨åº, è°ç¨ å½¢å¼ æ¯ "interpreter [arg] filename".
execve() è°ç¨ æå å ä¸ä¼ è¿å, å¶ è¿ç¨ ç æ£æ(text), æ°æ®(data), bss å å æ (stack) 段 被 è°å¥ç¨åº è¦ç. è°å¥ç¨åº ç»§æ¿äº è°ç¨ç¨åº ç PID å ææ æå¼ç æä»¶æè¿°ç¬¦, ä»ä»¬ ä¸ä¼ å 为 exec è¿ç¨ è å³é. ç¶è¿ç¨ ç æªå³ ä¿¡å· è¢« æ¸é¤. ææ è¢« è°ç¨è¿ç¨ è®¾ç½®è¿ ç ä¿¡å· é置为 缺çè¡ä¸º.
妿 å½åç¨åº æ£å¨ 被 ptrace è·è¸ª, æåç è°ç¨ execve() å å° æ¶å° ä¸ä¸ª SIGTRAP ä¿¡å·.
妿 坿§è¡æä»¶ æ¯ å¨æè¿æ¥ ç a.out äºè¿å¶ç¨åº, 嫿 å±äº«åº ç stub, å¼å§ æ§è¡ ç¨åº ç æ¶å, Linux 卿 è¿æ¥å¨(linker) ld.so(8) æ æéç å±äº«åº è°å¥ æ ¸å¿, å¹¶ä¸ å ç¨åº ç¸è¿.
妿 坿§è¡æä»¶ æ¯ å¨æè¿æ¥ ç ELF äºè¿å¶ç¨åº, å®ä¹å¨ PT_INTERP åæ®µ ç è§£éå¨(interpreter) è°å¥ æéç å±äº«åº. è¿æ¥ libc5 ç ç¨åº ç å¸å è§£éå¨ æ¯ /lib/ld-linux.so.1, è è¿æ¥ GNU libc2 (libc6) ç ç¨åº å为 /lib/ld-linux.so.2.
è¿åå¼ (RETURN VALUE)
è°ç¨æå ç æ¶å execve() ä¸ä¼ è¿å, è°ç¨å¤±è´¥ æ¶ è¿å -1, å¹¶ 设置 errno 为 ç¸åºç å¼.
é误 (ERRORS)
|
EACCES |
æä»¶ æ èæ¬è§£éå¨ ä¸æ£ç¡®. | ||
|
EACCES |
æ²¡æ æä»¶ æ èæ¬è§£éå¨ ç æ§è¡ æé. | ||
|
EACCES |
æä»¶ç³»ç» æè½½(mount) 为 noexec. | ||
|
EPERM |
æä»¶ç³»ç» æè½½ä¸º nosuid, 使ç¨è 䏿¯ è¶çº§ç¨æ·, ä»¥å æä»¶ è®¾ç½®äº SUID æ SGID ä½. | ||
|
EPERM |
è¿ç¨ æ£ è¢«è·è¸ª, 使ç¨è 䏿¯ è¶çº§ç¨æ·, ä»¥å æä»¶ è®¾ç½®äº SUID æ SGID ä½. | ||
|
E2BIG |
åæ°å表 è¿é¿. | ||
|
ENOEXEC |
坿§è¡æä»¶ ç æä»¶æ ¼å¼ æ æ³ è¯å«, 误ç¨å¨ ä¸åç ä½ç³»ç»æ, æè å¶ä» æ ¼å¼ é误 å¯¼è´ ç¨åº æ æ³ æ§è¡. | ||
|
EFAULT |
filename æé è¶åº å¯è®¿é® ç å°å空é´. |
ENAMETOOLONG
filename 太é¿.
|
ENOENT |
filename , èæ¬è§£éå¨, æ ELF è§£éå¨ ä¸åå¨. | ||
|
ENOMEM |
åæ ¸ ç©ºé´ ä¸è¶³. | ||
|
ENOTDIR |
å¨ filename , èæ¬è§£éå¨ æ ELF è§£éå¨ ç åç¼ è·¯å¾ ä¸, æäº æå 䏿¯ ç®å½. | ||
|
EACCES |
å¨ filename æ èæ¬è§£éå¨ ç åç¼ è·¯å¾ ä¸, 对 æäº ç®å½ 没æ 访é®è®¸å¯. | ||
|
ELOOP |
è§£æ filename , èæ¬è§£éå¨ æ ELF è§£éå¨ æ¶ éå° è¿å¤ç 符å·è¿æ¥. |
ETXTBUSY
坿§è¡æä»¶ 被 ä¸ä¸ª æ å¤ä¸ª è¿ç¨ 以 åæ¹å¼ æå¼.
|
EIO |
åç I/O é误. | ||
|
ENFILE |
è¾¾å° ç³»ç» å®ä¹ç åæ¶æå¼æä»¶æ° éå¶. | ||
|
EMFILE |
è¿ç¨ æå¼äº æå¤§æ°é ç æä»¶. | ||
|
EINVAL |
该 ELF 坿§è¡æä»¶ æ¥æ å¤ä¸ª PT_INTERP åæ®µ (å°±æ¯è¯´, è¯å¾ å®ä¹ å¤ä¸ª è§£éå¨). | ||
|
EISDIR |
ELF è§£éå¨ æ¯ ç®å½. | ||
|
ELIBBAD |
æ æ³ è¯å« ELF è§£éå¨ ç æ ¼å¼. |
CONFORMING TO
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 é误æåµ ç ææ¡£.
注æ (NOTES)
SUID and SGID processes can not be ptrace()d SUID or SGID.
å¨ #! æ ¼å¼ç shell 坿§è¡èæ¬ ä¸, 第ä¸è¡ ç é¿åº¦ ä¸å¾ è¶è¿ 127 åè.
Linux å¿½ç¥ èæ¬ç¨åº ç SUID å SGID ä½.
å¦è§ (SEE ALSO)
ld.so(8), execl(3), fork(2)
[䏿çç»´æ¤äºº]
徿 <xuming@users.sourceforge.net>
[ä¸æçææ°æ´æ°]
2003/05/13
ãä¸å½Linux论åmanæå页翻è¯è®¡åã
http://cmpp.linuxforum.net
è·
æ¬é¡µé¢ä¸æçç±ä¸æ
man
æå页计åæä¾ã
䏿 man
æå页计åï¼https://github.com/man-pages-zh/manpages-zh