OSDN Git Service

Update releases for LDP 3.68
[linuxjm/LDP_man-pages.git] / release / man2 / execve.2
index 6c6becb..67fcc10 100644 (file)
@@ -58,7 +58,7 @@
 .\" Updated 2013-03-22, Akihiro MOTOKI, LDP v3.50
 .\" Updated 2013-07-22, Akihiro MOTOKI, LDP v3.52
 .\"
-.TH EXECVE 2 2013\-07\-04 Linux "Linux Programmer's Manual"
+.TH EXECVE 2 2014\-05\-10 Linux "Linux Programmer's Manual"
 .SH 名前
 execve \- プログラムを実行する
 .SH 書式
@@ -84,7 +84,7 @@ execve \- プログラムを実行する
 ファイル名を含めることになっている。
 \fIenvp\fP は文字列の配列であり、伝統的に \fBkey=value\fP の形式をしており、
 新しいプログラムの環境変数として渡される。
-\fIargv\fP と \fIenvp\fP はいずれもの NULL ポインタで終わっている必要がある。
+\fIargv\fP と \fIenvp\fP はいずれものヌルポインタで終わっている必要がある。
 引き数配列と環境変数は、呼び出されたプログラムの main 関数を
 以下のように定義することによってアクセス可能になる。
 
@@ -99,22 +99,20 @@ int main(int argc, char *argv[], char *envp[])
 
 元のプログラムが ptrace されている場合、 \fBexecve\fP()  が成功した後に そのプログラムに \fBSIGTRAP\fP が送られる。
 
-If the set\-user\-ID bit is set on the program file pointed to by \fIfilename\fP,
-and the underlying filesystem is not mounted \fInosuid\fP (the \fBMS_NOSUID\fP
-flag for \fBmount\fP(2)), and the calling process is not being ptraced, then
-the effective user ID of the calling process is changed to that of the owner
-of the program file.  Similarly, when the set\-group\-ID bit of the program
-file is set the effective group ID of the calling process is set to the
-group of the program file.
+\fIfilename\fP で指定されたプログラムファイルに set\-user\-ID ビットが設定されており、 ファイルが存在するファイルシステムが
+\fInosuid\fP (\fBmount\fP(2)  の \fBMS_NOSUID\fP フラグ) でマウントされておらず、 呼び出したプロセスが ptrace
+されていない場合、 呼び出したプロセスの実効 (effective) ユーザ ID は プログラムファイルの所有者 (owner) に変更される。
+同様に、プログラムファイルに set\-group\-ID ビットが設定されていた場合、 呼び出したプロセスの有効グループ ID は
+プログラムファイルのグループに変更される。
 
 プロセスの実効ユーザ ID は保存 (saved) set\-user\-ID にコピーされる。 同様に、実効グループ ID は保存
 set\-group\-ID にコピーされる。 このコピーは、set\-user\-ID / set\-group\-ID 許可ビットにより発生する 実効 ID
 の変更後に行われる。
 
-実行ファイルが動的リンクされた a.out 実行形式で、共有ライブラリの スタブを含むものだった場合、実行の開始時に Linux の
-ダイナミック・リンカ \fBld.so\fP(8)  が呼び出され、必要な共有ライブラリをメモリに読み込んでリンクを行う。
+実行ファイルが動的リンクされた a.out 実行形式で、共有ライブラリの スタブを含むものだった場合、実行の開始時に Linux の ダイナミックリンカ
+\fBld.so\fP(8)  が呼び出され、必要な共有ライブラリをメモリに読み込んでリンクを行う。
 
-å®\9fè¡\8cã\83\95ã\82¡ã\82¤ã\83«ã\81\8cã\83\80ã\82¤ã\83\8aã\83\9fã\83\83ã\82¯ã\83»ã\83ªã\83³ã\82¯ã\81\95ã\82\8cã\81\9f ELF å®\9fè¡\8cå½¢å¼\8fã\81 ã\81£ã\81\9få ´å\90\88ã\80\81
+実行ファイルがダイナミックリンクされた ELF 実行形式だった場合、
 PT_INTERP セグメントに指定されたインタプリタが必要な 共有ライブラリ
 (shared library) を読み込むのに使用される。
 通常、インタプリタは glibc 2 をリンクしたバイナリでは
@@ -129,7 +127,7 @@ PT_INTERP セグメントに指定されたインタプリタが必要な 共有
 .IP *
 メモリマッピングは保持されない (\fBmmap\fP(2))。
 .IP *
-付加された (attached) System V 共有メモリセグメントは分離される (\fBshmat\fP(2))。
+付加された (attached) System\ V 共有メモリセグメントは分離される (\fBshmat\fP(2))。
 .IP *
 POSIX 共有メモリ領域はマッピングを解除される (\fBshm_open\fP(3))。
 .IP *
@@ -209,9 +207,9 @@ POSIX.1\-2001 は、動作が無視かデフォルトに設定されている全
 .fi
 .in
 
-\fIarg...\fP は \fBexecve\fP()  の \fIargv\fP 引き数が指すワード列である。
+\fIarg...\fP は、 \fBexecve\fP() の \fIargv\fP 引き数が指すワード列である。 \fIargv\fP[1] から始まる。
 
-移æ¤\8dæ\80§ã\82\92æ\8c\81ã\81\9fã\81\99ã\81«ã\81¯ã\80\81 \fIoptional\-arg\fP ã\81¯ç©ºã\81\8b 1ã\83¯ã\83¼ã\83\89ã\81 ã\81\91ã\81«ã\81\99ã\81¹ã\81\8dã\81§ã\81\82ã\82\8b (ã\81¤ã\81¾ã\82\8aã\80\81ã\83\9bã\83¯ã\82¤ã\83\88ã\83»ã\82¹ã\83\9aã\83¼ã\82¹ã\82\92å\90«ã\82\81ã\82\8bã\81¹ã\81\8dã\81§ã\81¯ã\81ªã\81\84\80\82
+移植性を持たすには、 \fIoptional\-arg\fP は空か 1ワードだけにすべきである (つまり、ホワイトスペースを含めるべきではない)。
 下記の「注意」の節を参照。
 .SS 引き数と環境変数の合計サイズの上限
 ほとんどの UNIX の実装は、新しいプログラムに渡すことができる コマンドライン引き数 (\fIargv\fP)  と環境変数 (\fIenvp\fP)
@@ -258,10 +256,10 @@ POSIX.1\-2001 は、動作が無視かデフォルトに設定されている全
 ファイルやスクリプトや ELF インタプリタに 実行許可 (execute permission) が与えられていない。
 .TP 
 \fBEACCES\fP
-The filesystem is mounted \fInoexec\fP.
+ファイルシステムが \fInoexec\fP でマウントされている。
 .TP 
 \fBEFAULT\fP
-\fIfilename\fP がアクセス可能なアドレス空間の外を指している。
+\fIfilename\fP ã\81¾ã\81\9fã\81¯é\85\8då\88\97 \fIargv\fP ã\81\8b \fIenvp\fP ã\81®ã\83\9dã\82¤ã\83³ã\82¿ã\81®ä¸\80ã\81¤ã\81\8cã\82¢ã\82¯ã\82»ã\82¹å\8f¯è\83½ã\81ªã\82¢ã\83\89ã\83¬ã\82¹ç©ºé\96\93ã\81®å¤\96ã\82\92æ\8c\87ã\81\97ã\81¦ã\81\84ã\82\8bã\80\82
 .TP 
 \fBEINVAL\fP
 ELF 実行形式で複数の PT_INTERP セグメントが存在する。 (すなわち複数のインタプリタを指定した。)
@@ -276,7 +274,7 @@ ELF インタプリタがディレクトリだった。
 ELF インタプリタが理解できるフォーマットでなかった。
 .TP 
 \fBELOOP\fP
-\fIfilename\fP ã\82\84ã\82¹ã\82¯ã\83ªã\83\97ã\83\88ã\82\84 ELF ã\81®ã\82¤ã\83³ã\82¿ã\83\97ã\83ªã\82¿ã\82\92解決ã\81\99ã\82\8bé\9a\9bã\81«é\81­é\81\87ã\81\97ã\81\9f ã\82·ã\83³ã\83\9cã\83ªã\83\83ã\82¯ã\83»ã\83ªã\83³ã\82¯ã\81\8cå¤\9aé\81\8eã\81\8eã\82\8bã\80\82
+\fIfilename\fP やスクリプトや ELF のインタプリタを解決する際に遭遇した シンボリックリンクが多過ぎる。
 .TP 
 \fBEMFILE\fP
 そのプロセスがオープンできるファイル数の上限まで既にオープンしている。
@@ -291,7 +289,7 @@ ELF インタプリタが理解できるフォーマットでなかった。
 ファイル \fIfilename\fP かスクリプトや ELF のインタプリタが存在しない。
 .TP 
 \fBENOEXEC\fP
-å®\9fè¡\8cã\83\95ã\82¡ã\82¤ã\83«ã\81\8cç\90\86解ã\81§ã\81\8dã\81ªã\81\84å½¢å¼\8fã\81§ã\81\82ã\82\8bã\81\8bã\80\81é\81\95ã\81\86ã\82¢ã\83¼ã\82­ã\83\86ã\82¯ã\83\81ã\83£ã\81®ã\82\82ã\81®ã\81\8bã\80\81 ã\81\9dã\81®ä»\96ã\81®ã\83\95ã\82©ã\83¼ã\83\9eã\83\83ã\83\88ã\83»ã\82¨ã\83©ã\83¼ã\81«ã\82\88ã\82\8aå®\9fè¡\8cã\81\8cã\81§ã\81\8dã\81ªã\81\8bã\81£ã\81\9fã\80\82
+実行ファイルが理解できない形式であるか、違うアーキテクチャのものか、 その他のフォーマットエラーにより実行ができなかった。
 .TP 
 \fBENOMEM\fP
 カーネルに十分なメモリがない。
@@ -300,8 +298,8 @@ ELF インタプリタが理解できるフォーマットでなかった。
 \fIfilename\fP やスクリプトや ELF のインタプリタの構成要素がディレクトリでない。
 .TP 
 \fBEPERM\fP
-The filesystem is mounted \fInosuid\fP, the user is not the superuser, and the
-file has the set\-user\-ID or set\-group\-ID bit set.
+ファイルシステムが \fInosuid\fP でマウントされ、ユーザがスーパーユーザでなく、 ファイルに set\-user\-ID あるいは
+set\-group\-ID ビットが設定されている。
 .TP 
 \fBEPERM\fP
 プロセスがトレースされ、ユーザがスーパーユーザでなく、 ファイルに set\-user\-ID あるいは set\-group\-ID ビットが設定されている。
@@ -317,32 +315,41 @@ 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).
+.\"
+ファイルシステムを \fInosuid\fP でマウントした場合に set\-user\-ID/set\-group\-ID の実行ファイルを
+どの様に扱うかは、Linux カーネルのバージョンによって異なる: あるバージョンでは、すでに必要な権限を持っている場合を除いて、 その実行を拒否する
+(そして \fBEPERM\fP を返す)。別のあるバージョンでは set\-user\-ID/set\-group\-ID ビットのみを無視し \fBexec\fP()
+は成功する。 Linux では、 \fIargv\fP と \fIenvp\fP に NULL を指定することができる。 どちらに NULL を指定した場合も、
+これらの引き数にヌルポインタ 1 個だけを含むリストへのポインタを指定したのと同じ効果を持つ。 \fB「この間違った機能を利用しないこと」\fP。
+これは非標準で、移植性もない。 他のほとんどの UNIX システムでは、これを行うとエラー (\fBEFAULT\fP)  になる。
 
-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.
+POSIX.1\-2001 は、 \fBsysconf\fP(3)  が返す値はプロセスの生存中は変化しないべきだとしている。 しかしながら、Linux
+2.6.23 以降では、リソース上限 \fBRLIMIT_STACK\fP が変化した場合、 コマンドライン引き数と環境変数を保持するための空間に対する上限が
+変化したことを反映して、 \fB_SC_ARG_MAX\fP が返す値も変化する。
 
-#! 実行形式のシェル・スクリプトの 1行目に許されている文字数は、 最大 127 文字である。
+.\"
+\fBexecve\fP() が失敗するほとんどの場合、 制御は元の実行可能イメージに戻り、 \fBexecve\fP()
+の呼び出し元がエラーを処理することができる。 しかしながら、 (リソース枯渇が原因となった場合など、まれに)
+呼び出し元に制御が戻る時点を過ぎてからエラーが発生する場合がある。 元の実行可能イメージはすでに破棄されているが、
+新しいイメージが完全には構築されていないという状況である。 このような場合、カーネルはそのプロセスをシグナル \fBSIGKILL\fP で停止 (kill)
+する。
+.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 ã\81®ã\81\86ã\81¡æ\9c\80å\88\9dã\81®ã\83\9bã\83¯ã\82¤ã\83\88ã\83»ã\82¹ã\83\9aã\83¼ã\82¹ã\81¾ã\81§ã\81\8c å¼\95ã\81\8dæ\95°ã\81¨ã\81\97ã\81¦æ¸¡ã\81\95ã\82\8cã\82\8bã\80\82 ã\81¾ã\81\9fã\80\81å\88¥ã\81®ã\82·ã\82¹ã\83\86ã\83 ã\81§ã\81¯
\82¤ã\83³ã\82¿ã\83\97ã\83ªã\82¿ã\83»ã\82¹ã\82¯ã\83ªã\83\97ã\83\88ã\81¯è¤\87æ\95°ã\81®å¼\95ã\81\8dæ\95°ã\82\92æ\8c\81ã\81¤ã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\80\81 \fIoptional\-arg\fP å\86\85ã\81®ã\83\9bã\83¯ã\82¤ã\83\88ã\83»ã\82¹ã\83\9aã\83¼ã\82¹ã\81\8cå¼\95ã\81\8dæ\95°ã\81®å\8cºå\88\87ã\82\8aã\81¨ã\81ªã\82\8bã\80\82
+\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 と \fIenvp\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
@@ -352,15 +359,11 @@ Linux では、 \fIargv\fP と \fIenvp\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
@@ -399,8 +402,8 @@ main(int argc, char *argv[])
     char *newenviron[] = { NULL };
 
     if (argc != 2) {
-       fprintf(stderr, "Usage: %s <file\-to\-exec>\en", argv[0]);
-       exit(EXIT_FAILURE);
+        fprintf(stderr, "Usage: %s <file\-to\-exec>\en", argv[0]);
+        exit(EXIT_FAILURE);
     }
 
     newargv[0] = argv[1];
@@ -454,6 +457,6 @@ argv[4]: world
 \fBgetopt\fP(3), \fBcredentials\fP(7), \fBenviron\fP(7), \fBpath_resolution\fP(7),
 \fBld.so\fP(8)
 .SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.54 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.68 の一部
 である。プロジェクトの説明とバグ報告に関する情報は
 http://www.kernel.org/doc/man\-pages/ に書かれている。