.\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992 .\" .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" .\" Modified by Michael Haardt .\" Modified Wed Jul 21 22:47:01 1993 by Rik Faith .\" Modified 21 Aug 1994 by Michael Chastain : .\" Fixed typoes. .\" Modified Fri Jan 31 16:24:28 1997 by Eric S. Raymond .\" .TH EXECVE 2 "3 September 1997" "Linux 2.0.30" "Linux Programmer's Manual" .SH NAME execve \- 執行程式 .SH "總覽 (SYNOPSIS)" .B #include .sp .BI "int execve (const char *" filename ", char *const " argv .BI "[], char *const " envp []); .SH "描述 (DESCRIPTION)" \fBexecve()\fP 執行 \fIfilename\fP 指出的 程式. \fIfilename\fP 必須 是 二進位制可執行檔案, 或者 以 "\fB#! \fIinterpreter \fR[arg]" 行 開始的 指令碼檔案. 後者的 interpreter 必須是 某個 可執行檔案 的 有效 路徑, 這個 可執行檔案 自身 不能是 指令碼程式, 呼叫 形式 是 "\fBinterpreter\fR [arg] \fIfilename\fR". \fBexecve()\fP 呼叫 成功 後 不會 返回, 其 程序 的 正文(text), 資料(data), bss 和 堆疊(stack) 段 被 調入程式 覆蓋. 調入程式 繼承了 呼叫程式 的 PID 和 所有 開啟的 檔案描述符, 他們 不會 因為 exec 過程 而 關閉. 父程序 的 未決 訊號 被 清除. 所有 被 呼叫程序 設定過 的 訊號 重置為 預設行為. 如果 當前程式 正在 被 ptrace 跟蹤, 成功的 呼叫 \fBexecve()\fP 後 將 收到 一個 \fBSIGTRAP\fP 訊號. 如果 可執行檔案 是 動態連線 的 a.out 二進位制程式, 含有 共享庫 的 stub, 開始 執行 程式 的 時候, Linux 動態 聯結器(linker) .IR ld.so (8) 把 所需的 共享庫 調入 核心, 並且 和 程式 相連. 如果 可執行檔案 是 動態連線 的 ELF 二進位制程式, 定義在 PT_INTERP 欄位 的 直譯器(interpreter) 調入 所需的 共享庫. 連線 libc5 的 程式 的 典型 直譯器 是 \fI/lib/ld-linux.so.1\fR, 而 連線 GNU libc2 (libc6) 的 程式 則為 \fI/lib/ld-linux.so.2\fR. .SH "返回值 (RETURN VALUE)" 呼叫成功 的 時候 \fBexecve()\fP 不會 返回, 呼叫失敗 時 返回 \-1, 並 設定 .I errno 為 相應的 值. .SH "錯誤 (ERRORS)" .TP 0.8i .B EACCES 檔案 或 指令碼直譯器 不正確. .TP .B EACCES 沒有 檔案 或 指令碼直譯器 的 執行 許可權. .TP .B EACCES 檔案系統 掛載(mount) 為 .IR noexec . .TP .B EPERM 檔案系統 掛載為 .IR nosuid , 使用者 不是 超級使用者, 以及 檔案 設定了 SUID 或 SGID 位. .TP .B EPERM 程序 正 被跟蹤, 使用者 不是 超級使用者, 以及 檔案 設定了 SUID 或 SGID 位. .TP .B E2BIG 引數列表 過長. .TP .B ENOEXEC 可執行檔案 的 檔案格式 無法 識別, 誤用在 不同的 體系結構, 或者 其他 格式 錯誤 導致 程式 無法 執行. .TP .B EFAULT .I filename 指標 超出 可訪問 的 地址空間. .TP .B ENAMETOOLONG .I filename 太長. .TP .B ENOENT .I filename , 指令碼直譯器, 或 ELF 直譯器 不存在. .TP .B ENOMEM 核心 空間 不足. .TP .B ENOTDIR 在 .I filename , 指令碼直譯器 或 ELF 直譯器 的 字首 路徑 中, 某些 成員 不是 目錄. .TP .B EACCES 在 .I filename 或 指令碼直譯器 的 字首 路徑 中, 對 某些 目錄 沒有 訪問許可. .TP .B ELOOP 解析 .I filename , 指令碼直譯器 或 ELF 直譯器 時 遇到 過多的 符號連線. .TP .B ETXTBUSY 可執行檔案 被 一個 或 多個 程序 以 寫方式 開啟. .TP .B EIO 發生 I/O 錯誤. .TP .B ENFILE 達到 系統 定義的 同時開啟檔案數 限制. .TP .B EMFILE 程序 打開了 最大數量 的 檔案. .TP .B EINVAL 該 ELF 可執行檔案 擁有 多個 PT_INTERP 欄位 (就是說, 試圖 定義 多個 直譯器). .TP .B EISDIR ELF 直譯器 是 目錄. .TP .B ELIBBAD 無法 識別 ELF 直譯器 的 格式. .SH "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 錯誤情況 的 文件. .SH "注意 (NOTES)" SUID and SGID processes can not be \fBptrace()\fPd SUID or SGID. 在 #! 格式的 shell 可執行指令碼 中, 第一行 的 長度 不得 超過 127 位元組. Linux 忽略 指令碼程式 的 SUID 和 SGID 位. .SH "另見 (SEE ALSO)" .BR ld.so "(8)," .BR execl "(3)," .BR fork (2) .SH "[中文版維護人]" .B 徐明 .SH "[中文版最新更新]" .BR 2003/05/13 .SH "《中國Linux論壇man手冊頁翻譯計劃》" .BI http://cmpp.linuxforum.net .SH "跋" .br 本頁面中文版由中文 man 手冊頁計劃提供。 .br 中文 man 手冊頁計劃:\fBhttps://github.com/man-pages-zh/manpages-zh\fR