(Translated by https://www.hiragana.jp/)
exec - Wikipedia

execUnixけいオペレーティングシステムにおける関数かんすうぐんで、関数かんすう引数ひきすうとしてわたされたプログラムで動作どうさちゅう当該とうがいプロセス完全かんぜん置換ちかんする機能きのうゆうする。あらたなプロセスを生成せいせいするわけではないので、プロセス識別子しきべつし (PID) は変化へんかしないが、プロセスの仮想かそう空間くうかんじょうのスタック、ヒープ、データなどはすべあらたなものに置換ちかんされる。

概要がいよう

編集へんしゅう

execlexeclpexecvexecvp ではあらたなプロセスイメージで現在げんざい環境かんきょう変数へんすうぐ。

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.hexec 関数かんすうぐん宣言せんげんされている。

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 あらたなプロセスイメージを実行じっこうするためのメモリがりない。

脚注きゃくちゅう

編集へんしゅう

関連かんれん項目こうもく

編集へんしゅう

外部がいぶリンク

編集へんしゅう