Provided by:
manpages-zh_1.5-1_all 
NAME
execve - 執行程式
` (SYNOPSIS)
#include <unistd.h>
int execve (const char *filename, char *const argv [], char *const
envp[]);
yz (DESCRIPTION)
execve() 執行 filename 指出的 程式. filename 必須 是 二進制可執行檔案,
或者 以 "#! interpreter [arg]" 行 開始的 稿本檔案. 後者的 interpreter
必須是 某 可執行檔案 的 有效 路徑, 這 可執行檔案 自 不能是 稿本程式,
調用 形式 是 "interpreter [arg] filename".
execve() 調用 成功 後 不會 返回, 其 進程 的 正文(text), 數據(data), bss
和 堆棧(stack) 段 被 調入程式 覆蓋. 調入程式 繼承了 調用程式 的 PID 和
所有 打開的 檔案描z符, 他 不會 因為 exec 過程 而 關閉. 父進程 的 未決
信號 被 清除. 所有 被 調用進程 設置過 的 信號 姜m為 預設行為.
如果 當前程式 正在 被 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 可執行檔案 的 檔案格式 無法 識別, 誤用在 不同的 體系結構, 或者
其他 格式 錯誤 導P 程式 無法 執行.
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 錯誤情況 的 文件.
`N (NOTES)
SUID and SGID processes can not be ptrace()d SUID or SGID.
在 #! 格式的 shell 可執行稿本 中, 第一行 的 長度 不得 超過 127 字節.
Linux 忽略 稿本程式 的 SUID 和 SGID 位.
t (SEE ALSO)
ld.so(8), execl(3), fork(2)
[]
} <xuming@users.sourceforge.net>
[]
2003/05/13
mLinuxanhttp://cmpp.linuxforum.net