Man page - execve(2)

Packages contains this manual

Available languages:

en fr pl nl ja ru zh_TW zh_CN de

Manual

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