exec
exec — 外部プログラムを実行する
説明
string exec ( string command [, array &output [, int &return_var]] )exec() は指定されたコマンド command を実行します。
パラメータ
- command
-
実行するコマンド
- output
-
引数 output が存在する場合、指定した配列は、
コマンドからの出力の各行で埋められます。
\n のような後に続く空白は、この配列には含まれません。
配列に既に何らかの要素が
含まれる場合は、exec() は配列の最後に追加される
ことに注意してください。関数が要素を追加することを望まないのなら、
それが exec() に渡される前に、配列の
unset() を呼び出してください。
- return_var
-
引数return_varが、引数
output と共に存在する場合、実行したコマンドの
ステータスがこの変数に書かれます。
返り値
コマンド結果の最後の行を返します。コマンドを実行し、 一切干渉を受けずに直接コマンドから全てのデータを受けとる必要が あるならば、PassThru() 関数を使ってください。実行されたコマンドの出力を取得するには、必ず output パラメータを設定・使用してください。
例
例 1873. exec() の例
<?php
// ("whoami" コマンドをパスに有するシステム上で)
// 実行中のphp/httpdプロセスを所有するユーザの名前を出力
echo exec('whoami');
?>
注意
警告 |
ユーザが入力したデータをこの関数に
渡すことを許可する場合、ユーザが任意のコマンドを実行できるようシステムを欺くことが
できないように escapeshellarg() または
escapeshellcmd() を適用する必要があります。 |
注意: この関数を用いてプログラムを開始し、 バックグラウンドで実行させたままにしたい場合、このプログラムの出力をファイル または他の出力ストリームにリダイレクトするようにする必要があります。さもないと、 PHP はプログラム実行終了までにハングしてしまいます。
注意: セーフモード が有効な場合、 safe_mode_exec_dirの中にある実行プログラムのみ実行可能です。 実際的な理由により、現在、実行プログラムへのパスに ..を 含めることはできません。
警告 |
セーフモードが有効な場合、コマンド文字列は
escapeshellcmd() でエスケープされます。
つまり、echo y | echo x は、echo y \| echo x
となります。 |
参考
system() |
passthru() |
escapeshellcmd() |
pcntl_exec() |
system() |
バックティック演算子 |
Exec クラス
アセンブリ: Microsoft.Build.Tasks (microsoft.build.tasks.dll 内)


Microsoft.Build.Utilities.Task
Microsoft.Build.Utilities.ToolTask
Microsoft.Build.Tasks.ToolTaskExtension
Microsoft.Build.Tasks.Exec


Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Exec コンストラクタ
アセンブリ: Microsoft.Build.Tasks (microsoft.build.tasks.dll 内)



Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Exec プロパティ

名前 | 説明 | |
---|---|---|
![]() | BuildEngine | タスクによって使用される IBuildEngine オブジェクトのインスタンスを取得または設定します。 ( Task から継承されます。) |
![]() | Command | |
![]() | ExitCode | 実行可能ファイルから返された終了コードを取得します。 ( ToolTask から継承されます。) |
![]() | HostObject | タスクに関連付けられているホスト オブジェクトを取得または設定します。 ( Task から継承されます。) |
![]() | IgnoreExitCode | |
![]() | Log | タスク ログ メソッドを格納している TaskLoggingHelperExtension クラスのインスタンスを取得します。 ( ToolTaskExtension から継承されます。) |
![]() | Outputs | |
![]() | StdErrEncoding | |
![]() | StdOutEncoding | |
![]() | Timeout | 実行可能なタスクが終了してからの時間を取得または設定します。 ( ToolTask から継承されます。) |
![]() | ToolPath | 実行する実行可能ファイルへのパスを取得または設定します。 ( ToolTask から継承されます。) |
![]() | WorkingDirectory |

名前 | 説明 | |
---|---|---|
![]() | Bag | 派生タスク クラスで使用されるパラメータのコレクションを取得します。 ( ToolTaskExtension から継承されます。) |
![]() | EnvironmentOverride | PATH 環境変数のオーバーライド値を取得します。 ( ToolTask から継承されます。) |
![]() | HelpKeywordPrefix | リソース名からヘルプ キーワードを作成するために使用するプレフィックスを取得または設定します。 ( Task から継承されます。) |
![]() | ResponseFileEncoding | 応答ファイルの Encoding を取得します。 ( ToolTask から継承されます。) |
![]() | StandardErrorEncoding | オーバーライドされます。 |
![]() | StandardErrorLoggingImportance | オーバーライドされます。 |
![]() | StandardOutputEncoding | オーバーライドされます。 |
![]() | StandardOutputLoggingImportance | オーバーライドされます。 |
![]() | TaskResources | タスクに関連付けられているカルチャ固有のリソースを取得または設定します。 ( Task から継承されます。) |
![]() | ToolName | オーバーライドされます。 |

Exec メソッド

名前 | 説明 | |
---|---|---|
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 ( Object から継承されます。) |
![]() | Execute | 指定したタスク パラメータを使用して、実行可能ファイルを実行します。 ( ToolTask から継承されます。) |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 ( Object から継承されます。) |
![]() | GetType | 現在のインスタンスの Type を取得します。 ( Object から継承されます。) |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 ( Object から継承されます。) |
![]() | ToString | 現在の Object を表す String を返します。 ( Object から継承されます。) |

名前 | 説明 | |
---|---|---|
![]() | AddCommandLineCommands | オーバーライドされます。 |
![]() | AddResponseFileCommands | 指定した CommandLineBuilderExtension に、コマンド ライン ツールが応答ファイルから実行できるスイッチおよびその他の情報を設定します。 ( ToolTaskExtension から継承されます。) |
![]() | CallHostObjectToExecute | タスクの処理を実行するホスト オブジェクトを呼び出します。 ( ToolTask から継承されます。) |
![]() | ExecuteTool | オーバーライドされます。 |
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 ( Object から継承されます。) |
![]() | GenerateCommandLineCommands | コマンド ライン ツールが、応答ファイルからではなく、コマンド ラインから直接実行する必要があるスイッチおよびその他の情報を取得します。 ( ToolTaskExtension から継承されます。) |
![]() | GenerateFullPathToTool | オーバーライドされます。 |
![]() | GenerateResponseFileCommands | 応答ファイルを指定するためにコマンド ライン ツールで使用されるスイッチを取得します。 ( ToolTaskExtension から継承されます。) |
![]() | GetBoolParameterWithDefault | 指定したブール型のパラメータの値を取得します。 ( ToolTaskExtension から継承されます。) |
![]() | GetIntParameterWithDefault | 指定した整数パラメータの値を取得します。 ( ToolTaskExtension から継承されます。) |
![]() | GetResponseFileSwitch | 応答 (.rsp) ファイルを指定するために実行可能ファイルによって使用されたコマンド ライン スイッチを返します。 ( ToolTask から継承されます。) |
![]() | GetWorkingDirectory | オーバーライドされます。 |
![]() | HandleTaskExecutionErrors | オーバーライドされます。 |
![]() | InitializeHostObject | タスクのホスト オブジェクトを初期化します。 ( ToolTask から継承されます。) |
![]() | LogEventsFromTextOutput | 単一行のテキストを解析して、標準形式のエラーまたは警告を識別します。 ( ToolTask から継承されます。) |
![]() | LogPathToTool | オーバーライドされます。 |
![]() | LogToolCommand | オーバーライドされます。 |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 ( Object から継承されます。) |
![]() | SkipTaskExecution | タスクの実行をスキップする必要があるかどうかを示します。 ( ToolTask から継承されます。) |
![]() | ValidateParameters | オーバーライドされます。 |

Exec メンバ
Exec タスクを実装します。このタスクを作成して実行するには、プロジェクト ファイルで Exec 要素を使用します。使用法とパラメータ情報については、「Exec タスク」を参照してください。

名前 | 説明 | |
---|---|---|
![]() | Exec |

名前 | 説明 | |
---|---|---|
![]() | BuildEngine | タスクによって使用される IBuildEngine オブジェクトのインスタンスを取得または設定します。(Task から継承されます。) |
![]() | Command | |
![]() | ExitCode | 実行可能ファイルから返された終了コードを取得します。(ToolTask から継承されます。) |
![]() | HostObject | タスクに関連付けられているホスト オブジェクトを取得または設定します。(Task から継承されます。) |
![]() | IgnoreExitCode | |
![]() | Log | タスク ログ メソッドを格納している TaskLoggingHelperExtension クラスのインスタンスを取得します。(ToolTaskExtension から継承されます。) |
![]() | Outputs | |
![]() | StdErrEncoding | |
![]() | StdOutEncoding | |
![]() | Timeout | 実行可能なタスクが終了してからの時間を取得または設定します。(ToolTask から継承されます。) |
![]() | ToolPath | 実行する実行可能ファイルへのパスを取得または設定します。(ToolTask から継承されます。) |
![]() | WorkingDirectory |

名前 | 説明 | |
---|---|---|
![]() | Bag | 派生タスク クラスで使用されるパラメータのコレクションを取得します。(ToolTaskExtension から継承されます。) |
![]() | EnvironmentOverride | PATH 環境変数のオーバーライド値を取得します。(ToolTask から継承されます。) |
![]() | HelpKeywordPrefix | リソース名からヘルプ キーワードを作成するために使用するプレフィックスを取得または設定します。(Task から継承されます。) |
![]() | ResponseFileEncoding | 応答ファイルの Encoding を取得します。(ToolTask から継承されます。) |
![]() | StandardErrorEncoding | オーバーライドされます。 |
![]() | StandardErrorLoggingImportance | オーバーライドされます。 |
![]() | StandardOutputEncoding | オーバーライドされます。 |
![]() | StandardOutputLoggingImportance | オーバーライドされます。 |
![]() | TaskResources | タスクに関連付けられているカルチャ固有のリソースを取得または設定します。(Task から継承されます。) |
![]() | ToolName | オーバーライドされます。 |

名前 | 説明 | |
---|---|---|
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 (Object から継承されます。) |
![]() | Execute | 指定したタスク パラメータを使用して、実行可能ファイルを実行します。 (ToolTask から継承されます。) |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 (Object から継承されます。) |
![]() | GetType | 現在のインスタンスの Type を取得します。 (Object から継承されます。) |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 (Object から継承されます。) |
![]() | ToString | 現在の Object を表す String を返します。 (Object から継承されます。) |

名前 | 説明 | |
---|---|---|
![]() | AddCommandLineCommands | オーバーライドされます。 |
![]() | AddResponseFileCommands | 指定した CommandLineBuilderExtension に、コマンド ライン ツールが応答ファイルから実行できるスイッチおよびその他の情報を設定します。 (ToolTaskExtension から継承されます。) |
![]() | CallHostObjectToExecute | タスクの処理を実行するホスト オブジェクトを呼び出します。 (ToolTask から継承されます。) |
![]() | ExecuteTool | オーバーライドされます。 |
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。) |
![]() | GenerateCommandLineCommands | コマンド ライン ツールが、応答ファイルからではなく、コマンド ラインから直接実行する必要があるスイッチおよびその他の情報を取得します。 (ToolTaskExtension から継承されます。) |
![]() | GenerateFullPathToTool | オーバーライドされます。 |
![]() | GenerateResponseFileCommands | 応答ファイルを指定するためにコマンド ライン ツールで使用されるスイッチを取得します。 (ToolTaskExtension から継承されます。) |
![]() | GetBoolParameterWithDefault | 指定したブール型のパラメータの値を取得します。 (ToolTaskExtension から継承されます。) |
![]() | GetIntParameterWithDefault | 指定した整数パラメータの値を取得します。 (ToolTaskExtension から継承されます。) |
![]() | GetResponseFileSwitch | 応答 (.rsp) ファイルを指定するために実行可能ファイルによって使用されたコマンド ライン スイッチを返します。 (ToolTask から継承されます。) |
![]() | GetWorkingDirectory | オーバーライドされます。 |
![]() | HandleTaskExecutionErrors | オーバーライドされます。 |
![]() | InitializeHostObject | タスクのホスト オブジェクトを初期化します。 (ToolTask から継承されます。) |
![]() | LogEventsFromTextOutput | 単一行のテキストを解析して、標準形式のエラーまたは警告を識別します。 (ToolTask から継承されます。) |
![]() | LogPathToTool | オーバーライドされます。 |
![]() | LogToolCommand | オーバーライドされます。 |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 (Object から継承されます。) |
![]() | SkipTaskExecution | タスクの実行をスキップする必要があるかどうかを示します。 (ToolTask から継承されます。) |
![]() | ValidateParameters | オーバーライドされます。 |

exec
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/04/11 04:28 UTC 版)
exec はUnix系オペレーティングシステムにおける関数群で、関数の引数として渡されたプログラムで動作中の当該プロセスを完全に置換する機能を有する。新たなプロセスを生成するわけではないので、プロセス識別子 (PID) は変化しないが、プロセスの仮想空間上のスタック、ヒープ、データなどは全て新たなものに置換される。
概要
execl、execlp、execv、execvp では新たなプロセスイメージで現在の環境変数を受け継ぐ。
exec を呼び出したときにオープン済みだったファイルは、新たなプロセスイメージとなってもオープンされたままである。これを使って、新たなプロセスイメージの標準ストリーム(stdin、stdout、stderr)を事前に設定する。
MS-DOSにて exec 関数群の1つを使ってプログラムを実行する場合、その実行ファイルのヘッダにある "maximum allocation" がデフォルト値 0xFFFF にセットされているかのようにプログラムをメモリにロードする。EXEHDRユーティリティを使えば、その値を変更できる。しかしそれを行って exec の一種でその実行ファイルを実行しようとすると、コマンドラインから直接起動した場合や spawn 系関数群を使って起動した場合とプログラムの振る舞いが変わってしまうことがある。
Unixシェルの多くにも exec という組み込みコマンドがあり、指定されたプログラムでシェルプロセスを上書きする[1]。この機能は、環境変数などを設定して実際のプログラムを実行するラッパースクリプトによく用いられる。exec を使えば、実際に実行したいプログラムが起動した際にシェルが使用していたリソースを解放することができる[2]。
プロトタイプ
POSIX標準では unistd.h、DOSやOS/2やWindowsでは process.h に exec 関数群が宣言されている。
int execl(char const *path, char const *arg0, ...);
int execle(char const *path, char const *arg0, ..., char const * const *envp);
int execlp(char const *file, char const *arg0, ...);
int execv(char const *path, char const * const * argv);
int execve(char const *path, char const * const *argv, char const * const *envp);
int execvp(char const *file, char const * const *argv);
実装によっては、関数名のプレフィックスとしてアンダースコアを付けている場合がある(例えば、_execl)。
現代のたいていのUnixにおける実装では、最も汎用的なexecveをシステムコールとし(すなわちexecve(2))、他はそれを呼ぶライブラリ関数(たとえばexec(3))としている。
関数名
各関数の名前は exec(execute、すなわち「実行」)を核とし、それに次のような文字がいくつか続く形式である。
- e - 環境変数群へのポインタ配列を明示的に新プロセスイメージに渡す。
- l - コマンドライン引数群を個々に関数の引数として渡す。
- p - file 引数で示された実行ファイルのある場所を PATH という環境変数を使って検索する。
- v - コマンドライン引数群をポインタ配列として関数に渡す。
引数
- path - 新プロセスイメージとして実行すべきファイルのパス名を指定する。
- file - 新プロセスイメージとして実行すべきファイルのパス名を指定する。ただしスラッシュが含まれていない場合は環境変数 PATH を使って実行すべきファイルのパス名を検索する。
- arg0 - 実行ファイルの名前(へのポインタ)。arg0 から新プロセスイメージに渡される引数のポインタが続く。arg0 は通常 path または file と同じである。arg0 を使って自身の位置を知ろうとする実行ファイルもあるが、それが正しいかどうかは保証されない。
- argv - 新プロセスイメージに渡す引数群へのポインタ配列。
- envp - 環境変数群のポインタ配列。
envpの指す配列は、ヌル終端の文字列へのポインタ配列であり、個々の文字列は次の形式である。
name=value
ここで、name は環境変数名、value はその変数の値である。envp 配列の最後には必ずnullがなければならない。envp 自体がnullの場合は、現在の環境変数設定をそのまま受け継ぐ。
戻り値
通常 exec 関数は現在のプロセスを置換するので、元々それを呼び出したプロセスイメージに戻り値を返すことはできない。プロセスには終了ステータスがあるが、それを受け取るのは親プロセスである。
exec 関数が呼び出したプロセスに戻るのは、エラーが発生し、かつ元のプロセスをまだ破壊していない場合に限られる。その場合の戻り値は -1 で、errno には以下のような値が設定される。
名前 | 意味 |
---|---|
E2BIG | 引数リストがシステムの制限を越えている。 |
EACCES | 指定されたファイルが実行できないファイルである(あるいはロックされている)。 |
ENOENT | 指定されたファイルまたはパス名が存在しない。 |
ENOMEM | 新たなプロセスイメージを実行するためのメモリが足りない。 |
exec 実行中、元のプロセスを破壊し始めてからエラーが発生した場合は、戻るべきプロセスが存在しないためそのプロセス自体を終了させる。
脚注
- ^ http://www.gnu.org/software/bash/manual/bashref.html#Shell-Builtin-Commands - Shell Builtin Commands in bash manual
- ^ http://tldp.org/LDP/abs/html/wrapper.html
関連項目
外部リンク
exec(3)
– JM Project Linux Library Functions マニュアルexecve(2)
– JM Project Linux System Calls マニュアル
exec
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2018/12/01 07:13 UTC 版)
「Server Side Includes」の記事における「exec」の解説
システムコマンドやCGIプログラムを実行し、その出力結果をWebページに差し込む。
※この「exec」の解説は、「Server Side Includes」の解説の一部です。
「exec」を含む「Server Side Includes」の記事については、「Server Side Includes」の概要を参照ください。
固有名詞の分類
- exec()のページへのリンク