OSDN Git Service

長音記号の修正を release に反映
[linuxjm/LDP_man-pages.git] / release / man3 / system.3
index 563efe8..cb63c08 100644 (file)
@@ -1,5 +1,7 @@
 .\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
+.\" and Copyright (c) 2014 by Michael Kerrisk <mtk.manpages@gmail.com>
 .\"
+.\" %%%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.
 .\"
 .\" Formatted or processed versions of this manual, if unaccompanied by
 .\" the source, must acknowledge the copyright and authors of this work.
-.\" License.
+.\" %%%LICENSE_END
+.\"
 .\" Modified Sat Jul 24 17:51:15 1993 by Rik Faith (faith@cs.unc.edu)
 .\" Modified 11 May 1998 by Joseph S. Myers (jsm28@cam.ac.uk)
 .\" Modified 14 May 2001, 23 Sep 2001 by aeb
 .\" 2004-12-20, mtk
 .\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.\"
 .\" Japanese Version Copyright (c) 1996 Shoichi OZAWA
 .\"    all right reserved.
 .\" Translated 1996-09-01, Shoichi OZAWA <ozawa@omika.hitachi.co.jp>
 .\" Updated 2001-10-16, Kentaro Shirakata <argrath@ub32.org>
 .\" Updated 2005-02-27, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
 .\"
-.\"WORD:       feature test macro      機能検査マクロ
-.\"
-.TH SYSTEM 3  2010-09-10 "" "Linux Programmer's Manual"
+.TH SYSTEM 3 2014\-06\-13 "" "Linux Programmer's Manual"
 .SH 名前
 system \- シェルコマンドの実行
 .SH 書式
 .nf
-.B #include <stdlib.h>
+\fB#include <stdlib.h>\fP
 .sp
-.BI "int system(const char *" "command" );
+\fBint system(const char *\fP\fIcommand\fP\fB);\fP
 .fi
 .SH 説明
-.BR system ()
-は
-.I command
-で指定したコマンドを
-.B "/bin/sh \-c"
-.I command
-の形で実行する。指定したコマンドが終了すればこの関数も終了する。
-コマンド実行中は、
-.B SIGCHLD
-はブロックされ、
-.B SIGINT
-と
-.B SIGQUIT
-は無視される。
+\fBsystem\fP() ライブラリ関数は、\fBfork\fP(2) を使って子プロセスを作成し、その子プロセスは以下のように \fIcommand\fP
+で指定されたシェルコマンドを \fBexecl\fP(3) を使って実行する。
+
+    execl("/bin/sh", "sh", "\-c", command, (char *) 0);
+
+\fBsystem\fP() が返るのはコマンドが完了した後である。
+
+コマンドの実行中は、 \fBsystem\fP() を呼び出したプロセスでは、 \fBSIGCHLD\fP はブロックされ、 \fBSIGINT\fP と
+\fBSIGQUIT\fP は無視される (\fIcommand\fP を実行する子プロセスでは、これらのシグナルはデフォルトの処理方法にしたがって処理される)。
+
+\fIcommand\fP が NULL の場合、 \fBsystem\fP()  はそのシステムでシェルが利用可能かを示すステータスを返す。
 .SH 返り値
-エラーが発生した場合
-.RB ( fork (2)
-に失敗した場合など)、\-1 を返す。
-そうでなければ、コマンドのステータスを返す。
-後者の場合、ステータスは
-.BR wait (2)
-で定義されているフォーマットで返ってくる。
-従って、コマンドの終了コードは
-.I WEXITSTATUS(status)
-で得ることが出来る。
-.I /bin/sh
-が実行出来なかった場合、
-終了ステータスはコマンドが
-.I exit(127)
-を実行した場合と同じになる。
+\fBsystem\fP() の返り値は以下のいずれかである。
+.IP * 3
+\fIcommand\fP が NULL の場合、 シェルが利用可能ならゼロ以外の値、利用不可なら 0。
+.IP *
+子プロセスを作成できなかった場合、または子プロセスのステータスを取得できなかった場合、 返り値は \-1 である。
+.IP *
+子プロセスでシェルを実行できなかった場合、 返り値は子プロセスがステータス 127 で \fB_exit\fP(2) を呼び出して終了したのと同じになる。
+.IP *
+システムコールがすべて成功した場合、 返り値は \fIcommand\fP を実行するのに使用された子プロセスのシェルの終了ステータスとなる
+(シェルの終了ステータスはそのシェルが実行した最後のコマンドの終了ステータスである)。
 .PP
-.I command
-の値が NULL のときは、
-.BR system ()
-はシェルが利用可能ならゼロ以外の値を返し、利用不可ならゼロを返す。
+最後の 2 つの場合、返り値は "wait status" であり、 \fBwaitpid\fP(2) に書かれているマクロ (つまり
+\fBWIFEXITED\fP() や \fBWEXITSTATUS\fP() などのマクロ) を使って検査することができる。
 .PP
-.BR system ()
-は他の子プロセスのウエイトステータスには影響を与えない。
+\fBsystem\fP()  は他の子プロセスのウエイトステータスには影響を与えない。
+.SH 属性
+.SS "マルチスレッディング (pthreads(7) 参照)"
+関数 \fBsystem\fP() はスレッドセーフである。
 .SH 準拠
-C89, C99, POSIX.1-2001.
+C89, C99, POSIX.1\-2001.
 .SH 注意
-.PP
-(「どの」ヘッダファイルをインクルードするよりも前に)
-機能検査マクロ
-.B _XOPEN_SOURCE
-が定義された場合には、
-.BR wait (2)
-で説明されているマクロ群
-.RB ( WEXITSTATUS ()
-等) が
-.I <stdlib.h>
+\fBsystem\fP() により簡便性と利便性がもたらされる。この関数は \fBfork\fP(2), \fBexecl\fP(3), \fBwaitpid\fP(2)
+の呼び出しにおける詳細をすべて行うとともに、 シグナルの適切な処理も行う。 また、シェルは \fIcommand\fP に対して通常の置換
+(substitutions) と I/O リダイレクトを行う。 \fBsystem\fP() を使用することによる主なコストは非効率性である。
+シェルを実行するプロセスを作成するためとそのシェルを実行するために、余計にシステムコールが必要となる。
+
+(「どの」ヘッダーファイルをインクルードするよりも前に)  機能検査マクロ \fB_XOPEN_SOURCE\fP が定義された場合には、
+\fBwaitpid\fP(2)  で説明されているマクロ群 (\fBWEXITSTATUS\fP()  等) が \fI<stdlib.h>\fP
 をインクルードすると利用可能になる。
 .PP
-既に述べたように、
-.BR system ()
-は
-.B SIGINT
-と
-.B SIGQUIT
-を無視する。
-よってループから
-.BR system ()
-を呼ぶプログラムは、
-以下の例のように子プロセスの終了状態を自分でチェックしておかないと、
-中断できなくなるかもしれない。
+既に述べたように、 \fBsystem\fP()  は \fBSIGINT\fP と \fBSIGQUIT\fP を無視する。 よってループから \fBsystem\fP()
+を呼ぶプログラムは、 以下の例のように子プロセスの終了状態を自分でチェックしておかないと、 中断できなくなるかもしれない。
 .br
 .nf
 
@@ -121,51 +107,25 @@ C89, C99, POSIX.1-2001.
     }
 .fi
 .PP
-set-user-ID や set-group-ID の特権をもつプログラムの中では
-.BR system ()
-を使ってはいけない。なぜなら、ある環境変数の未知の値によって
-システムの安全が損なわれるからである。代わりに
-.BR exec (3)
-関連の関数群の中で
-.BR execlp (3)
-と
-.BR execvp (3)
-以外の関数を使用すべきである。
-実際のところ、
-.BR system ()
-は
-.I /bin/sh
-が bash バージョン 2 であるシステムでは、
-set-user-ID や set-group-ID の特権を持つプログラムからは正しく動作しない。
-なぜなら、bash バージョン 2 はスタートアップ時に特権を落とすからである。
-(Debian では、sh として起動された時にはこのような動作を行なわないように
-修正された bash を用いている)
+set\-user\-ID や set\-group\-ID の特権をもつプログラムの中では \fBsystem\fP()
+を使ってはいけない。なぜなら、ある環境変数の未知の値によって システムの安全が損なわれるからである。代わりに \fBexec\fP(3)  関連の関数群の中で
+\fBexeclp\fP(3)  と \fBexecvp\fP(3)  以外の関数を使用すべきである。 実際のところ、 \fBsystem\fP()  は
+\fI/bin/sh\fP が bash バージョン 2 であるシステムでは、 set\-user\-ID や set\-group\-ID
+の特権を持つプログラムからは正しく動作しない。 なぜなら、bash バージョン 2 はスタートアップ時に特権を落とすからである。 (Debian
+では、sh として起動された時にはこのような動作を行なわないように 修正された bash を用いている)
 .PP
-glibc 2.1.3 より前のバージョンでは、
-.I command
-が NULL の場合に
-.I /bin/sh
-が利用可能かどうかのチェックは実際には行わず、
-いつでも利用可能であるとみなしていた。
-.BR system ()
-はこの場合に常に 1 を返していた。
-POSIX.1-2001 ではシェルが提供されているという標準に準拠した実装を
-要求しているが、glibc 2.1.3 以降ではシェルのチェックを実行している。
-なぜなら、呼び出し元のプログラムが
-.BR system ()
-を呼び出すより前に (POSIX.1-2001 では規定されていない)
-.BR chroot (2)
-を呼び出していた時には、シェルが利用可能でない場合や実行可能ファイル
-でない場合があるからである。
+glibc 2.1.3 より前のバージョンでは、 \fIcommand\fP が NULL の場合に \fI/bin/sh\fP
+が利用可能かどうかのチェックは実際には行わず、 いつでも利用可能であるとみなしていた。 \fBsystem\fP()  はこの場合に常に 1 を返していた。
+POSIX.1\-2001 ではシェルが提供されているという標準に準拠した実装を 要求しているが、glibc 2.1.3
+以降ではシェルのチェックを実行している。 なぜなら、呼び出し元のプログラムが \fBsystem\fP()  を呼び出すより前に (POSIX.1\-2001
+では規定されていない)  \fBchroot\fP(2)  を呼び出していた時には、シェルが利用可能でない場合や実行可能ファイル でない場合があるからである。
 .PP
-実行したシェルコマンドが 127
-.RB ( /bin/sh
-の呼び出しに失敗した時に返す値) を返すことも考えられる。
-そのため、プログラムは (リターンコードを見るだけでは)
-.BR execve (2)
-の呼び出しが失敗したことを確実に知ることはできない。
+シェルコマンドがステータス 127 で終了することもある。 この場合、\fBsystem\fP()
+の返り値は、子プロセスでシェルが実行できなかった場合と区別できない。
 .SH 関連項目
-.BR sh (1),
-.BR signal (2),
-.BR wait (2),
-.BR exec (3)
+\fBsh\fP(1), \fBsigaction\fP(2), \fBsigprocmask\fP(2), \fBfork\fP(2), \fBwait\fP(2),
+\fBexec\fP(3), \fBsignal\fP(7)
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.78 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。