.\" Copyright (c) 1991 The Regents of the University of California. .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)exec.3 6.4 (Berkeley) 4/19/91 .\" .\" Converted for Linux, Mon Nov 29 11:12:48 1993, faith@cs.unc.edu .\" Updated more for Linux, Tue Jul 15 11:54:18 1997, pacman@cqc.com .\" .TH EXEC 3 1993-11-29 "BSD MANPAGE" "Linux Programmer's Manual" .SH NAME execl, execlp, execle, execv, execvp \- 執行某個文件 .SH "總覽 (SYNOPSIS)" .B #include .sp .B extern char **environ; .sp .BI "int execl( const char *" path ", const char *" arg ", ...); .br .BI "int execlp( const char *" file ", const char *" arg ", ...); .br .BI "int execle( const char *" path ", const char *" arg .BI ", ..., char * const " envp "[]);" .br .BI "int execv( const char *" path ", char *const " argv "[]);" .br .BI "int execvp( const char *" file ", char *const " argv "[]);" .SH "描述 (DESCRIPTION)" .B exec 系列 函數 用 新的 進程 映象 置換 當前的 進程 映象. 本 手冊頁 描述的 這些 函數 實際上 是 對 .BR execve (2) 函數 的 前端(front-end) 包裝. (關於 當前進程 的 置換 詳見 .B execve 的 手冊頁.) .PP 這些 函數 的 第一個 參數 是 待執行 程序 的 路徑名(文件名). .PP 在 函數 .BR execl , .BR execlp , 和 .B execle 中, .I "const char *arg" 以及 省略號 代表 的 參數 可被 視爲 .IR arg0 , .IR arg1 , \&..., .IR argn . 他們 合起來 描述了 指向 null 結尾的 字符串 的 指針 列表, 即 執行程序 的 參數列表. 作爲 約定, 第一個 arg 參數 應該 指向 執行程序名 自身. 參數列表 .I 必須 用 .B NULL 指針 結束! .PP .B execv 和 .B execvp 函數 提供 指向 null 結尾的 字符串 的 指針數組 作爲 新程序 的 參數列表. 作爲 約定, 指針數組 中 第一個 元素 應該 指向 執行程序名 自身. 指針數組 .I 必須 用 .B NULL 指針 結束! .PP .B execle 函數 同時 說明了 執行進程 的 環境(environment), 他 在 .B NULL 指針 後面 要求 一個 附加參數, NULL 指針 用於 結束 參數列表, 或者說, argv 數組. 這個 附加參數 是 指向 null 結尾的 字符串 的 指針數組, 他 .I 必須 用 .B NULL 指針 結束! 其他 函數 從 當前進程 的 .I environ 外部變量 中 獲取 新進程 的 環境. .PP 某些 函數 有 特殊的 語義. .PP 如果 提供的 文件名 中 不包含 斜槓符(/), 函數 .B execlp 和 .B execvp 將 同 shell 一樣 搜索 執行文件. 搜索路徑 由 環境變量 .B PATH 指定. 如果 該 變量 不存在, 則 使用 缺省路徑 ``:/bin:/usr/bin''. 另外, 某些 錯誤 要 特殊處理. .PP 如果 對 某個 文件 的 訪問 遭到 拒絕 ( .B execve 返回 .BR EACCES ), 這些 函數 將 在 搜索路徑 中 繼續 尋找. 如果 沒有 找到 符合的 文件, 他們 返回時 把 .I errno 置爲 .BR EACCES . .PP 如果 無法 識別 文件首部 ( .B execve 返回 .BR ENOEXEC ), 這些 函數 將 以 文件名 作爲 第一個 參數 調用 shell. (如果 這個 嘗試 失敗 就 不再 進行 搜索 了.) .SH "返回值 (RETURN VALUE)" 任何 .B exec 函數 返回 均 表明 發生了 錯誤. 返回值 是 \-1, 全局變量 .I errno 指出 錯誤類型. .SH "文件 (FILE)" .I /bin/sh .SH "錯誤 (ERROR)" 這些 函數 均可能 失敗, .I errno 被 置爲 庫函數 .BR execve (2) 設置的 各種 錯誤類型. .SH "另見 (SEE ALSO)" .BR sh (1), .BR execve (2), .BR fork (2), .BR environ (5), .BR ptrace (2) .SH "兼容性 (COMPATIBILITY)" 在 某些 其他系統 中, 缺省路徑 (當 環境變量 \fBPATH\fR 不存在) 把 當前目錄 列在 .I /bin 和 .IR /usr/bin 後面, 這是 爲了 防止 特洛伊木馬. Linux 在這兒 採取了 傳統的 "當前目錄優先" 缺省路徑. .PP 當 試圖 執行 程序 並且 發生 錯誤 的 時候, .B execlp 和 .B execvp 的 行爲 是 歷史 習慣, 但是 沒有 進入 正式文檔, 也沒有 被 POSIX 標準 說明. BSD (可能 還有 其他 系統) 中 進程 自動 進入 睡眠, 如果 發生 ETXTBSY, 他們 就 重試. 而 Linux 視此爲 嚴重錯誤, 並且 立即 返回. .PP 傳統的 做法中, 函數 .B execlp 和 .B execvp 忽略 所有 錯誤, 除了 上述的 錯誤, .B ENOMEM 和 .BR E2BIG . 如果 發生 這三類 錯誤, 他們 就 返回. 而 現在的 做法是, 不僅僅 上述的 錯誤, 任何 錯誤 均導致 函數 返回. .SH "遵循 (CONFORMING TO)" .BR execl , .BR execv , .BR execle , .B execlp 和 .B execvp 遵循 IEEE Std1003.1-88 (``POSIX.1''). .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