X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=release%2Fman2%2Fexecve.2;h=22fa79485fe42fa5ee33363dd557beda9e3aaaf9;hb=dba08e2eee1afb613e4e8e9310eb752cb06f45de;hp=31a6a11b4f0ee481694a24f1dbfa2e7f84217ace;hpb=4fa3e54b837e5814a4598ec901d77446bf5cb9b3;p=linuxjm%2FLDP_man-pages.git diff --git a/release/man2/execve.2 b/release/man2/execve.2 index 31a6a11b..22fa7948 100644 --- a/release/man2/execve.2 +++ b/release/man2/execve.2 @@ -1,8 +1,7 @@ -.\" Hey Emacs! This file is -*- nroff -*- source. -.\" .\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992 .\" and Copyright (c) 2006 Michael Kerrisk .\" +.\" %%%LICENSE_START(VERBATIM) .\" 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. @@ -22,6 +21,7 @@ .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. +.\" %%%LICENSE_END .\" .\" Modified by Michael Haardt .\" Modified 1993-07-21 by Rik Faith @@ -39,7 +39,26 @@ .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* -.TH EXECVE 2 2011\-09\-14 Linux "Linux Programmer's Manual" +.\" +.\" Japanese Version Copyright (c) 1996 TABATA Tomohira +.\" all rights reserved. +.\" Translated 1996-07-04, TABATA Tomohira +.\" Updated 1997-12-14, HANATAKA Shinya +.\" Updated 2001-08-17, HANATAKA Shinya +.\" Updated 2005-02-05, Yuichi SATO +.\" Updated 2005-09-06, Akihiro MOTOKI +.\" Updated 2005-11-19, Akihiro MOTOKI +.\" Updated 2006-08-13, Akihiro MOTOKI, LDP v2.39 +.\" Updated 2007-01-09, Akihiro MOTOKI, LDP v2.43 +.\" Updated 2007-06-03, Akihiro MOTOKI, LDP v2.51 +.\" Updated 2007-10-12, Akihiro MOTOKI, LDP v2.66 +.\" Updated 2008-04-04, Akihiro MOTOKI, LDP v2.79 +.\" Updated 2008-11-05, Akihiro MOTOKI, LDP v3.12 +.\" Updated 2012-05-29, Akihiro MOTOKI +.\" Updated 2013-03-22, Akihiro MOTOKI, LDP v3.50 +.\" Updated 2013-07-22, Akihiro MOTOKI, LDP v3.52 +.\" +.TH EXECVE 2 2014\-05\-10 Linux "Linux Programmer's Manual" .SH 名前 execve \- プログラムを実行する .SH 書式 @@ -65,7 +84,7 @@ execve \- プログラムを実行する ファイル名を含めることになっている。 \fIenvp\fP は文字列の配列であり、伝統的に \fBkey=value\fP の形式をしており、 新しいプログラムの環境変数として渡される。 -\fIargv\fP と \fIenvp\fP はいずれもの NULL ポインタで終わっている必要がある。 +\fIargv\fP と \fIenvp\fP はいずれものヌルポインタで終わっている必要がある。 引き数配列と環境変数は、呼び出されたプログラムの main 関数を 以下のように定義することによってアクセス可能になる。 @@ -90,23 +109,25 @@ int main(int argc, char *argv[], char *envp[]) set\-group\-ID にコピーされる。 このコピーは、set\-user\-ID / set\-group\-ID 許可ビットにより発生する 実効 ID の変更後に行われる。 -実行ファイルが動的リンクされた a.out 実行形式で、共有ライブラリの スタブを含むものだった場合、実行の開始時に Linux の -ダイナミック・リンカ \fBld.so\fP(8) が呼び出され、必要な共有ライブラリをメモリに読み込んでリンクを行う。 +実行ファイルが動的リンクされた a.out 実行形式で、共有ライブラリの スタブを含むものだった場合、実行の開始時に Linux の ダイナミックリンカ +\fBld.so\fP(8) が呼び出され、必要な共有ライブラリをメモリに読み込んでリンクを行う。 -実行ファイルがダイナミック・リンクされた ELF 実行形式だった場合、 PT_INTERP セグメントに指定されたインタプリタが必要な 共有ライブラリ -(shared library) を読み込むのに使用される。 通常、インタプリタとしては、 Linux libc 5 をリンクしたバイナリの場合には -\fI/lib/ld\-linux.so.1\fP が、 glibc 2 をリンクしたバイナリの場合には \fI/lib/ld\-linux.so.2\fP -が使用される。 +実行ファイルがダイナミックリンクされた ELF 実行形式だった場合、 +PT_INTERP セグメントに指定されたインタプリタが必要な 共有ライブラリ +(shared library) を読み込むのに使用される。 +通常、インタプリタは glibc 2 をリンクしたバイナリでは +\fI/lib/ld\-linux.so.2\fP である (古い Linux libc5 をリンクした +バイナリでは、通常のインタプリタは \fI/lib/ld\-linux.so.1\fP であった)。 以下に示す以外のすべてのプロセス属性は \fBexecve\fP() の前後で保持される。 -.IP * +.IP * 3 捕捉されたシグナルの処理方法 (disposition) は デフォルト動作にリセットされる (\fBsignal\fP(7))。 .IP * 代替シグナルスタックはどれも保持されない (\fBsigaltstack\fP(2))。 .IP * メモリマッピングは保持されない (\fBmmap\fP(2))。 .IP * -付加された (attached) System V 共有メモリセグメントは分離される (\fBshmat\fP(2))。 +付加された (attached) System\ V 共有メモリセグメントは分離される (\fBshmat\fP(2))。 .IP * POSIX 共有メモリ領域はマッピングを解除される (\fBshm_open\fP(3))。 .IP * @@ -132,9 +153,14 @@ set\-user\-ID か set\-group\-ID されたプログラムが実行されてい .IP * \fBprctl\fP(2) の \fBPR_SET_KEEPCAPS\fP フラグはクリアされる。 .IP * +(Linux 2.4.36 以降 / 2.6.23 以降) set\-user\-ID や set\-group\-ID されたプログラムが実行された場合、 +\fBprctl\fP(2) の \fBPR_SET_PDEATHSIG\fP フラグで設定された parent death シグナルはクリアされる。 +.IP * プロセス名は新しい実行ファイルの名前にリセットされる。 プロセス名は \fBprctl\fP(2) の \fBPR_SET_NAME\fP で設定でき、 \fIps\ \-o comm\fP で表示できる。 .IP * +\fBSECBIT_KEEP_CAPS\fP の \fIsecurebits\fP フラグはクリアされる。 \fBcapabilities\fP(7) 参照。 +.IP * 終了シグナル (termination signal) は \fBSIGCHLD\fP にリセットされる (\fBclone\fP(2) 参照)。 .PP 以下の点についても注意すること: @@ -181,9 +207,9 @@ POSIX.1\-2001 は、動作が無視かデフォルトに設定されている全 .fi .in -\fIarg...\fP は \fBexecve\fP() の \fIargv\fP 引き数が指すワード列である。 +\fIarg...\fP は、 \fBexecve\fP() の \fIargv\fP 引き数が指すワード列である。 \fIargv\fP[1] から始まる。 -移植性を持たすには、 \fIoptional\-arg\fP は空か 1ワードだけにすべきである (つまり、ホワイト・スペースを含めるべきではない)。 +移植性を持たすには、 \fIoptional\-arg\fP は空か 1ワードだけにすべきである (つまり、ホワイトスペースを含めるべきではない)。 下記の「注意」の節を参照。 .SS 引き数と環境変数の合計サイズの上限 ほとんどの UNIX の実装は、新しいプログラムに渡すことができる コマンドライン引き数 (\fIargv\fP) と環境変数 (\fIenvp\fP) @@ -230,10 +256,10 @@ POSIX.1\-2001 は、動作が無視かデフォルトに設定されている全 ファイルやスクリプトや ELF インタプリタに 実行許可 (execute permission) が与えられていない。 .TP \fBEACCES\fP -ファイル・システムが \fInoexec\fP でマウントされている。 +ファイルシステムが \fInoexec\fP でマウントされている。 .TP \fBEFAULT\fP -\fIfilename\fP がアクセス可能なアドレス空間の外を指している。 +\fIfilename\fP または配列 \fIargv\fP か \fIenvp\fP のポインタの一つがアクセス可能なアドレス空間の外を指している。 .TP \fBEINVAL\fP ELF 実行形式で複数の PT_INTERP セグメントが存在する。 (すなわち複数のインタプリタを指定した。) @@ -248,7 +274,7 @@ ELF インタプリタがディレクトリだった。 ELF インタプリタが理解できるフォーマットでなかった。 .TP \fBELOOP\fP -\fIfilename\fP やスクリプトや ELF のインタプリタを解決する際に遭遇した シンボリック・リンクが多過ぎる。 +\fIfilename\fP やスクリプトや ELF のインタプリタを解決する際に遭遇した シンボリックリンクが多過ぎる。 .TP \fBEMFILE\fP そのプロセスがオープンできるファイル数の上限まで既にオープンしている。 @@ -263,7 +289,7 @@ ELF インタプリタが理解できるフォーマットでなかった。 ファイル \fIfilename\fP かスクリプトや ELF のインタプリタが存在しない。 .TP \fBENOEXEC\fP -実行ファイルが理解できない形式であるか、違うアーキテクチャのものか、 その他のフォーマット・エラーにより実行ができなかった。 +実行ファイルが理解できない形式であるか、違うアーキテクチャのものか、 その他のフォーマットエラーにより実行ができなかった。 .TP \fBENOMEM\fP カーネルに十分なメモリがない。 @@ -272,7 +298,7 @@ ELF インタプリタが理解できるフォーマットでなかった。 \fIfilename\fP やスクリプトや ELF のインタプリタの構成要素がディレクトリでない。 .TP \fBEPERM\fP -ファイル・システムが \fInosuid\fP でマウントされ、ユーザがスーパーユーザでなく、 ファイルに set\-user\-ID あるいは +ファイルシステムが \fInosuid\fP でマウントされ、ユーザがスーパーユーザでなく、 ファイルに set\-user\-ID あるいは set\-group\-ID ビットが設定されている。 .TP \fBEPERM\fP @@ -289,31 +315,46 @@ SVr4, 4.3BSD, POSIX.1\-2001. POSIX.1\-2001 には #! 動作についての記 .SH 注意 set\-user\-id プロセスと set\-group\-ID プロセスは \fBptrace\fP(2) できない。 -Linux はスクリプトの set\-user\-ID と set\-group\-ID ビットを無視する。 +.\" e.g., EFAULT on Solaris 8 and FreeBSD 6.1; but +.\" HP-UX 11 is like Linux -- mtk, Apr 2007 +.\" Bug filed 30 Apr 2007: http://bugzilla.kernel.org/show_bug.cgi?id=8408 +.\" Bug rejected (because fix would constitute an ABI change). +.\" +The result of mounting a filesystem \fInosuid\fP varies across Linux kernel +versions: some will refuse execution of set\-user\-ID and set\-group\-ID +executables when this would give the user powers she did not have already +(and return \fBEPERM\fP), some will just ignore the set\-user\-ID and +set\-group\-ID bits and \fBexec\fP() successfully. On Linux, \fIargv\fP and +\fIenvp\fP can be specified as NULL. In both cases, this has the same effect +as specifying the argument as a pointer to a list containing a single null +pointer. \fBDo not take advantage of this misfeature!\fP It is nonstandard and +nonportable: on most other UNIX systems doing this will result in an error +(\fBEFAULT\fP). -ファイルシステムを \fInosuid\fP でマウントした場合に set\-user\-ID/set\-group\-ID の実行ファイルを -どの様に扱うかは、Linux カーネルのバージョンによって異なる: あるバージョンでは、すでに必要な権限を持っている場合を除いて、 その実行を拒否する -(そして \fBEPERM\fP を返す)。別のあるバージョンでは set\-user\-ID/set\-group\-ID ビットのみを無視し \fBexec\fP() -は成功する。 +POSIX.1\-2001 は、 \fBsysconf\fP(3) が返す値はプロセスの生存中は変化しないべきだとしている。 しかしながら、Linux +2.6.23 以降では、リソース上限 \fBRLIMIT_STACK\fP が変化した場合、 コマンドライン引き数と環境変数を保持するための空間に対する上限が +変化したことを反映して、 \fB_SC_ARG_MAX\fP が返す値も変化する。 -#! 実行形式のシェル・スクリプトの 1行目に許されている文字数は、 最大 127 文字である。 +.\" +In most cases where \fBexecve\fP() fails, control returns to the original +executable image, and the caller of \fBexecve\fP() can then handle the error. +However, in (rare) cases (typically caused by resource exhaustion), failure +may occur past the point of no return: the original executable image has +been torn down, but the new image could not be completely built. In such +cases, the kernel kills the process with a \fBSIGKILL\fP signal. +.SS インタプリタ・スクリプト +インタプリタスクリプトの 1行目に許されている文字数は、 最大 127 文字である。 .\" e.g., Solaris 8 .\" e.g., FreeBSD before 6.0, but not FreeBSD 6.0 onward インタプリタ・スクリプトの \fIoptional\-arg\fP 引き数の解釈方法は実装により異なる。 Linux では、インタプリタ名 \fIinterpreter\fP に続く文字列全体がインタプリタに 1個の引き数として渡される。 しかし、動作が異なるシステムもある。 あるシステムでは、 -\fIoptional\-arg\fP のうち最初のホワイト・スペースまでが 引き数として渡される。 また、別のシステムでは -インタプリタ・スクリプトは複数の引き数を持つことができ、 \fIoptional\-arg\fP 内のホワイト・スペースが引き数の区切りとなる。 +\fIoptional\-arg\fP のうち最初のホワイトスペースまでが 引き数として渡される。 また、別のシステムでは +インタプリタ・スクリプトは複数の引き数を持つことができ、 \fIoptional\-arg\fP 内のホワイトスペースが引き数の区切りとなる。 -.\" e.g., EFAULT on Solaris 8 and FreeBSD 6.1; but -.\" HP-UX 11 is like Linux -- mtk, Apr 2007 -.\" Bug filed 30 Apr 2007: http://bugzilla.kernel.org/show_bug.cgi?id=8408 -.\" Bug rejected (because fix would constitute an ABI change). .\" -Linux では、 \fIargv\fP に NULL を指定することができる。これは、この引き数に NULL ポインタ -1個だけを含むリストへのポインタを指定したのと同じ効果を持つ。 \fB「この間違った機能を利用しないこと」\fP。 これは非標準で、移植性もない。 -他のほとんどの UNIX システムでは、これを行うとエラー (\fBEFAULT\fP) になる。 - +Linux はスクリプトの set\-user\-ID と set\-group\-ID ビットを無視する。 +.SS 歴史 .\" .\" .SH BUGS .\" Some Linux versions have failed to check permissions on ELF @@ -323,15 +364,11 @@ Linux では、 \fIargv\fP に NULL を指定することができる。これ .\" .BR execve () .\" that could be exploited for denial of service by a suitably crafted .\" ELF binary. There are no known problems with 2.0.34 or 2.2.15. -POSIX.1\-2001 は、 \fBsysconf\fP(3) が返す値はプロセスの生存中は変化しないべきだとしている。 しかしながら、Linux -2.6.23 以降では、リソース上限 \fBRLIMIT_STACK\fP が変化した場合、 コマンドライン引き数と環境変数を保持するための空間に対する上限が -変化したことを反映して、 \fB_SC_ARG_MAX\fP が返す値も変化する。 -.SS 歴史 -UNIX V6 では \fBexec\fP() コールの引き数リストは 0 で終端され、 \fImain\fP の引き数リストは \-1 で終端されていた。 -そのため、 \fImain\fP の引き数リストは、その後の \fBexec\fP() コールには直接使用できなかった。 UNIX V7 以降では、ともに +UNIX\ V6 では \fBexec\fP() コールの引き数リストは 0 で終端され、 \fImain\fP の引き数リストは \-1 で終端されていた。 +そのため、 \fImain\fP の引き数リストは、その後の \fBexec\fP() コールには直接使用できなかった。 UNIX\ V7 以降では、ともに NULL で終端される。 .SH 例 -このプログラムは、以下の二つ目のプログラムから実行するためのものである。 コマンドラインを 1行に 1個ずつ表示するだけのプログラムである。 +このプログラムは、以下の二つ目のプログラムから実行するためのものである。 コマンドライン引き数を 1行に 1個ずつ表示するだけのプログラムである。 .in +4n .nf @@ -370,8 +407,8 @@ main(int argc, char *argv[]) char *newenviron[] = { NULL }; if (argc != 2) { - fprintf(stderr, "Usage: %s \en", argv[0]); - exit(EXIT_FAILURE); + fprintf(stderr, "Usage: %s \en", argv[0]); + exit(EXIT_FAILURE); } newargv[0] = argv[1]; @@ -424,3 +461,7 @@ argv[4]: world \fBchmod\fP(2), \fBfork\fP(2), \fBptrace\fP(2), \fBexecl\fP(3), \fBfexecve\fP(3), \fBgetopt\fP(3), \fBcredentials\fP(7), \fBenviron\fP(7), \fBpath_resolution\fP(7), \fBld.so\fP(8) +.SH この文書について +この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.67 の一部 +である。プロジェクトの説明とバグ報告に関する情報は +http://www.kernel.org/doc/man\-pages/ に書かれている。