Provided by: manpages-ja-dev_0.5.0.0.20131015+dfsg-2_all 

名前
execl, execlp, execle, execv, execvp, execvpe - ファイルを実行する
書式
#include <unistd.h> extern char **environ; int execl(const char *path, const char *arg, ...); int execlp(const char *file, const char *arg, ...); int execle(const char *path, const char *arg, ..., char * const envp[]); int execv(const char *path, char *const argv[]); int execvp(const char *file, char *const argv[]); int execvpe(const char *file, char *const argv[], char *const envp[]); glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照): execvpe(): _GNU_SOURCE
説明
exec() ファミリーの関数は現在のプロセスイメージを新しいプロセスイメージで置き 換える。このマニュアルで説 明されている関数は execve(2) のフロントエンドである。 (現在のプロセスイメージの置き換えについての詳細は execve(2) のマニュアルを参照) これらの関数の最初の引き数は、実行されるファイルの名前である。 関数 execl(), execlp(), execle() の const char *arg とそれに続く省略部分は arg0, arg1, ..., argn とみな される。 これらには、実行されるプログラムで利用可能な引き数のリストを指定する (引き数のリストは NULL で終 端された文字列へのポインタから構成される)。 慣習として、最初の引き数は、実行されるファイル名 へのポインタ にする。引き数のリストは必ず NULL で終わらなければならず、これらの関数は可変長引き数関数なので、 このポイ ンタは (char *) NULL とキャストしなければならない。 関数 execv(), execvp(), execvpe() は、利用可能な引き数リスト (NULL で終端された文字列への ポインタの配 列) を新しいプログラムに渡す。 慣習として、最初の引き数は実行されるファイル名へ のポインタにする。ポイン タの配列は必ず NULL で終わらなければならない。 関数 execle(), execvpe() では、呼び出し元が引き数 envp 経由実行されるプログラムの環境を指定することがで きる。 envp 引き数は、NULL で終端された文字列へのポインタの配列であり、 NULL ポインタで終わらなければなら ない。 他の関数では、呼び出し元のプロセスの外部変数 environ から新しいプロセス用の環境を与える。 execlp() と execvp() の特別な動作 関数 execlp(), execvp(), execvpe() は、指定されたファイル名がスラッシュ (/) を含んでいない場合、 シェル と同じ動作で実行可能なファイルを探索する。 ファイルの検索は、環境変数 PATH で指定されたコロン区切りのディ レクトリのパス名のリストを対象に行われる。 この変数が定義されていない場合、パス名のリストのデフォルト値と して、 カレントディレクトリの後ろに、 confstr(_CS_PATH) が返すディレクトリのリストをつなげた値が使用され る (この confstr(3) の呼び出しでは通常 "/bin:/usr/bin" が返される)。 指定されたファイル名がスラッシュを含む場合、 PATH は無視され、指定されたパス名のファイルが実行される。 さらに、いくつかのエラーは特別に処理される。 ファイルが実行ファイルでない場合 (このとき呼び出そうとした execve(2) はエラー EACCES で失敗する)、これら の関数は残りの検索パスの検索を続ける。 他にファイルが見つからなくなった場合 errno に EACCES を設定し復帰 する。 ファイルのヘッダが実行形式として認識できない場合 (このとき呼び出そうとした execve(2) はエラー ENOEXEC で 失敗する)、これらの関数はそのファイルを最初の引き数としたシェル (/bin/sh) を実行する (これにも失敗した場 合、これ以上の検索は行われない)。
返り値
exec() 群の関数が復帰するのは、エラーが発生した場合のみである。 返り値は -1 で、 errno にエラーの内容が セットされる。
エラー
これら全ての関数は失敗する場合がある。その場合、 execve(2) に対して規定されたエラーが errno に設定され る。
バージョン
execvpe() 関数は glibc 2.11 で初めて登場した。
準拠
POSIX.1-2001, POSIX.1-2008. execvpe() 関数は GNU による拡張である。
注意
Linux 以外のシステムには、 (環境変数 PATH が定義されていないときの) デフォルトのパスにおいて、カレント ディレクトリが /bin と /usr/bin の後ろに配置されるものもある。 これはトロイの木馬対策のためである。 Linux では、デフォルトのパスに、昔ながらの「現在のディレクトリを 先に探索」というルールを使っている。 ファイルを実行しようとしている間にエラーが発生した時の execlp() と execvp() のふるまいについて歴史的な慣 習はあるが、伝統的に文書として記載されておらず、 POSIX 標準でも規定されていない。BSD (またおそらく他のシ ステム) では、 ETXTBSY が発生した場合、自動的に中断 (sleep) し再試行を行う。 Linux はそれをハードエラーと して取り扱い即座に復帰する。 伝統的に、関数 execlp() と execvp() は、上で説明したエラーと、これら 2 つの関数自身が返す ENOMEM と E2BIG 以外の全てのエラーを無視していたが、 今では、上で説明した以外のエラーが発生した場合でも、 返ってく るよう変更された。
関連項目
sh(1), execve(2), fork(2), ptrace(2), fexecve(3), environ(7)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.54 の一部 である。プロジェクトの説明とバグ報告 に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。