EXECVE 2

中文man手册

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