aboutsummaryrefslogblamecommitdiff
path: root/ja_JP.eucJP/man/man3/exec.3
blob: 537053ee7efa9f3c3c207f3bf6f740eb3c67fc0d (plain) (tree)































                                                                              
                                                       
   
             





































































































































































































































































                                                                            
.\" Copyright (c) 1991, 1993
.\"	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	8.3 (Berkeley) 1/24/94
.\"	%Id: exec.3,v 1.6 1997/10/14 07:23:14 bde Exp %
.\"
.\" $FreeBSD$
.Dd January 24, 1994
.Dt EXEC 3
.Os
.Sh 名称
.Nm execl ,
.Nm execlp ,
.Nm execle ,
.Nm exect ,
.Nm execv ,
.Nm execvp
.Nd ファイルを実行する
.Sh 書式
.Fd #include <unistd.h>
.Vt extern char **environ;
.Ft int
.Fn execl "const char *path" "const char *arg" ...
.Ft int
.Fn execlp "const char *file" "const char *arg" ...
.Ft int
.Fn execle "const char *path" "const char *arg" ...
.Ft int
.Fn exect "const char *path" "char *const argv[]" "char *const envp[]"
.Ft int
.Fn execv "const char *path" "char *const argv[]"
.Ft int
.Fn execvp "const char *file" "char *const argv[]"
.Sh 解説
.Fn exec
ファミリの関数は現在のプロセスイメージを新しいプロセスイメージで置き
換えます。
このマニュアルページで説明する関数は、関数
.Xr execve 2
のフロントエンドです
(現在のプロセスの置き換えの詳細については、
.Xr execve 2
のマニュアルページを参照してください)。
.Pp
これらの関数の初期引数は、実行されるファイルのパス名です。
.Pp
.Fn execl ,
.Fn execlp ,
および
.Fn execle
の各関数の
.Fa "const char *arg"
および後続の省略記号は
.Em arg0 ,
.Em arg1 ,
\&...,
.Em argn
と考えることができます。これらは実行された
プログラムに利用できる引数リストを表す ナル文字で終わるストリングを指す
1 つまたは複数のポインタのリストを記述します。慣行で、最初の引数は、実行中の
ファイルに対応するファイル名を指す必要があります。
引数のリストは
.Dv NULL
ポインタで終了させる
.Em 必要があり
ます。
.Pp
.Fn exect ,
.Fn execv ,
および
.Fn execvp
の各関数は、新しいプログラムに利用できる引数リストを表す
ナル文字で終わるストリングを指すポインタの配列を提供します。
慣行で、最初の引数は、実行中のファイルに対応するファイル名を
指す必要があります。
ポインタの配列は
.Dv NULL
ポインタで終了する
.Sy 必要があり
ます。
.Pp
.Fn execle
と
.Fn exect
の各関数も、実行されたプロセスの環境を指定します。
そのためには、パラメータリスト内にある引数リストを終了させる
.Dv NULL
ポインタ、または追加パラメータとともに argv 配列を指すポインタに従います。
この追加のパラメータは、ナル文字で終わるストリングを指すポインタの
配列であり、
.Dv NULL
ポインタで終了される
.Em 必要があり
ます。
他の関数は、現在のプロセス内の外部変数
.Va environ
から新しいプロセスイメージ用の環境を取り上げます。
.Pp
これらの関数には特別な意味論のあるものもあります。
.Pp
.Fn execlp
と
.Fn execvp
の各関数は、指定されたファイル名にスラッシュ
.Dq Li /
が含まれていない場合、実行可能ファイルを検索してシェルの処置を複製します。
検索パスは
.Dq Ev PATH
変数によって環境内で指定されたパスです。
この値が指定されない場合、デフォルトのパス
.Dq Ev /bin:/usr/bin:
が使用されます。
さらに、特定のエラーが特別に取り扱われます。
.Pp
エラーが曖昧な場合(簡単にするために、ここでは
.Er ENOEXEC
以外のすべてのエラーを曖昧と考えます。ただし、致命的なエラー
.Er EACCES
だけが真に曖昧です)、
これらの関数は、ファイルを開始して、ファイルが存在するか、そして適切な実行
パーミッションがあるかを判定するかのように動作します。そうである場合、
これらの関数は
.Fn execve
によって設定された値に復元されたグローバル変数
.Va errno
でただちに戻ります。
そうでない場合、検索が継続します。
検索が
.Fn execve
の実行に成功せず、またはエラーのために終了せずに完了すると、
これらの関数は、適切な実行パーミッションのある少なくとも
1 つのファイルが
見つかったかどうかに従って、グローバル変数
.Va errno
を
.Er EACCES
または
.Er ENOENT
に設定して戻ります。
.Pp
ファイルのヘッダが認識されない(試みた
.Fn execve
が
.Er ENOEXEC
を返した)場合、
これらの関数は、最初の引数としてファイルのパスがあるシェルを実行します
(この試みが失敗した場合、それ以上の検索は行われません)。
.Pp
.Fn exect
関数は、プログラムトレース機能を有効にしてファイルを実行します
(
.Xr ptrace 2
を参照)。
.Pp
.Sh 戻り値
.Fn exec
関数が戻った場合、エラーが発生しているはずです。
戻り値は \-1 であり、グローバル変数
.Va errno
が設定されてエラーを示します。
.Sh ファイル
.Bl -tag -width /bin/sh -compact
/bin/sh
シェル
.El
.Sh エラー
.Fn execl ,
.Fn execle ,
.Fn execlp
および
.Fn execvp
は処理失敗し、ライブラリ関数
.Xr execve 2
および
.Xr malloc 3
について指定されたエラーを指定する
.Va errno
を設定する可能性があります。
.Pp
.Fn exect
と
.Fn execv
は、ライブラリ関数
.Xr execve 2
について指定されたエラーに
関して
.Va errno
を設定する可能性があります。
.Pp
.Sh 関連項目
.Xr sh 1 ,
.Xr execve 2 ,
.Xr fork 2 ,
.Xr ktrace 2 ,
.Xr ptrace 2 ,
.Xr environ 7 .
.Sh 互換性
歴史的には
.Fn execlp
関数と
.Fn execvp
関数のデフォルトのパスは
.Dq Pa :/bin:/usr/bin
です。これが、システムセキュリティを向上させるために
現在のディレクトリを最後に配置するよう変更されました。
.Pp
ファイルを実行しようとしている間にエラーが発生したときの
.Fn execlp
と
.Fn execvp
の動作は、あまり歴史的な慣行ではなく、従来から
ドキュメント化されておらず、
.Tn POSIX
標準で指定されていません。
.Pp
従来、
.Fn execlp
関数と
.Fn execvp
関数は、上記のもの、および
.Er ETXTBSY ,
.Er ENOMEM
と
.Er E2BIG
を除いてすべてのエラーを無視しました。
.Er ETXTBSY
でこれらの関数は
数秒間、スリープした後で再試行し、
.Er ENOMEM
と
.Er E2BIG
でこれらの関数は
返ります。
これらは現在
.Er ETXTBSY
について戻り、存在と実行可能性をもっと注意深く判定します。
特に、パス接頭語内のアクセスできないディレクトリを表す
.Er EACCES
が、不適切な実行パーミッションのあるファイルについての
.Er EACCES
と混乱されないようになっています。
.Bx 4.4
で、これらの関数は、
.Er EACCES ,
.Er ENOENT ,
.Er ENOEXEC
および
.Er ETXTBSY
以外のすべてのエラーで戻りました。
これは従来のエラー処理より劣ったものでした。パス接頭語についてのエラーの
無視を破り、異常に曖昧なエラー
.Er EFAULT
と異常なエラー
.Er EIO
の処理を改良するだけだからです。
動作は
.Xr sh 1
の動作と一致するように変更されました。
.Pp
.Sh 規格
.Fn execl ,
.Fn execv ,
.Fn execle ,
.Fn execlp
および
.Fn execvp
は
.St -p1003.1-88
に準拠しています。