

高岡智則
年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)
execve とは何か
execve は Unix 系のシステムコールで、現在のプロセスを新しいプログラムで置換する働きをします。実行ファイルのパス pathname、引数 argv、環境変数 envp の3つを受け取り、指定されたプログラムを現在のプロセスの実行イメージとして読み込みます。
pathname は実行したいプログラムのパスです。例えば /bin/ls など、絶対パスや相対パスを使います。
argv は新しいプログラムに渡す引数の配列です。最初の要素は実行されるプログラム名で、末尾は NULL です。環境や用途に応じて引数を組み合わせます。
envp は環境変数の配列です。PATH や LANG など、実行環境を決める設定が含まれます。
使い方の基本的な流れ
execve を使う目的は、現在のプログラムの動作を別のプログラムに置換えることです。これをうまく使えば、ある処理を別のプログラムに任せることができます。
使い方の基本的な流れは次のとおりです。まず新しいプログラムを実行したい場合、通常は fork によって子プロセスを作成します。子プロセス内で execve を呼び出して新しいプログラムを読み込み、成功すれば子プロセスはその新しいプログラムとして動き出します。もし失敗すればエラー処理へ進みます。
例の流れをざっくり描くと、親プロセスが子を作り、子が新しいプログラムを実行します。ここでポイントは、execve が成功すると元のプログラムのコードは使われなくなる点です。
失敗時の対応とエラーハンドリング
execve は失敗することがあります。戻り値は -1 で、errno にエラー番号が設定されます。原因としてはパスの誤り、実行権限の不足、環境変数の問題などが挙げられます。エラー時には適切にエラーメッセージを出して終了するのが基本です。
比較とまとめ
| 関数名 | 用途 | 主な使い方 |
|---|---|---|
| execve | 現在のプロセスを新しいプログラムで置換 | path, argv, envp を渡す |
| fork | 新しい子プロセスを作成 | 子で execve を呼ぶのが一般的 |
| exec 系の他の関数 | 似た目的だが引数の取り扱いが少し異なる | 状況に応じて使い分ける |
まとめ
execve は 現在のプロセスを新しいプログラムで置換する強力なツールです。正しく使えば、プログラム間の切り替えを安全に行えます。初心者は fork と組み合わせた使い方を練習すると理解が深まります。
execveの同意語
- execve
- 現在のプロセスを指定した実行ファイルで置換する POSIX の関数です。引数には実行ファイルのパス、引数の配列 argv、環境変数の配列 envp を渡します。成功するとこの関数は戻りませんが、エラー時には -1 が返り errno が設定されます。
- execl
- 引数を可変長リストで渡す形式の実行関数です。path は実行ファイルのパス、続く引数は argv[0], argv[1], ... の順で渡し、最後に NULL を付けます。環境は現在の環境を自動的に使用します(envp は指定しません)。
- execlp
- PATH 環境変数を使って実行ファイルを探し、可変長の引数を渡して現在のプロセスを置換します。envp は不要で、見つかった実行ファイルが現在の環境で実行されます。
- execle
- 引数を可変長リストで渡し、最後に環境変数のポインタ envp を指定する形式です。path と引数に続き、NULL の後に envp を渡して環境を明示的に設定します。
- execv
- argv 配列を渡して実行ファイルを置換します。環境は現在の環境が使われます(envp の指定は不要)。
- execvp
- PATH を検索して実行ファイルを見つけ、argv 配列を使って現在のプロセスを置換します。envp は現在の環境が利用されます。
- execvpe
- PATH の検索と envp の両方を指定できる Linux 拡張版です。path の検索と argv、envp の設定を一度に行います。
execveの対義語・反対語
- 終了
- 現在のプロセスをその場で終わらせること。execve が現在のプロセスを新しいプログラムで“置換する”のに対し、終了は実行を完全に完結させ、プロセス自体を終わらせます。
- フォーク
- 新しいプロセスを作って処理を分岐させること。execve は現在のプロセスを新しいプログラムで置換しますが、フォークは別のプロセスを作成して並行して実行を続けます。
- リターン
- 関数や処理の呼び出し元へ戻ること。現在のプログラム全体を別のプログラムに置換するのではなく、コードの流れを継続させます。
- 信号による終了
- プロセスに終了信号を送って終了させること。execve の置換とは別の、外部からプロセスを終了させる手段です。
- 別プロセスの起動
- 現在のプロセスを置換せず、別の新しいプロセスを起動して実行を開始すること。execve の対極として、並行して実行を開始する動作を指します。
execveの共起語
- fork
- 新しい子プロセスを作るためのシステムコール。通常は fork でプロセスを分岐させた後、execve で別のプログラムに置換します。
- systemコール
- OS に機能を依頼する低レベルの命令。execve は UNIX 系のシステムコールの一つで、現在のプロセスの実行イメージを新しいものに置換します。
- glibc
- C 言語の標準ライブラリ(GNU C Library)。execve のラッパー関数(execl, execv など)を提供します。
- argv
- 新しいプログラムに渡す引数の配列。argv[0] には実行ファイル名が入ることが多いです。
- envp
- 新しいプログラムへ渡す環境変数の配列。HOME や PATH などが含まれます。
- PATH
- 実行ファイルを探すディレクトリのリスト。execvp など PATH 指定で検索されます。
- execl
- 引数を列挙して渡す方式の exec 系関数。第一引数に実行ファイルのパス、続く引数を可変長で渡します。
- execlp
- PATH から検索して実行する execl の派生版。
- execle
- 環境変数 envp を渡して実行する版。
- execv
- 引数を配列で渡す exec 系。
- execvp
- PATH から実行ファイルを検索して実行する配列版。
- execvpe
- PATH 検索と環境変数の指定を同時に行う拡張版(glibc などに存在)。
- ENOENT
- ファイルが見つからない場合に返されるエラーコード。
- EACCES
- ファイルまたはディレクトリへのアクセスが許可されていない場合のエラーコード。
- ENOEXEC
- 実行形式でないファイルを実行しようとした場合に返されるエラーコード。
- ENOTDIR
- パスの途中の要素がディレクトリではない場合に返されるエラーコード。
- EFAULT
- 渡したポインタが無効な場合に返されるエラーコード。
- 実行可能ファイル
- OS が実行できるファイル。実行権限と正しい形式を満たす必要があります。
- ELF
- Linux/Unix の実行ファイル形式の代表的な形式。プログラムのコードとデータが格納されます。
- a.out
- 古い実行ファイル形式の名称。
- プロセス置換
- 現在のプロセスの実行イメージを新しいプログラムに置換する動作。
- 動的リンク/ローダ
- 動的リンクされた実行ファイルでは、実行時に動的リンカ/ローダが介在します。
- argv[0]
- 新しいプログラムに渡される最初の引数。多くの場合プログラム名として使われます。
- 環境変数
- 新しいプログラムへ渡される環境情報の集合。
- POSIX
- Portable Operating System Interface の略。execve などは POSIX 標準に準拠します。
- シェル
- コマンドを解釈して実行するプログラム。外部コマンドを実行する際に execve が使われます。
- 戻り値
- 成功時には返らず、失敗時に -1 と errno が設定されます。
- 権限
- 実行権限(x)がファイルに必要。権限がないと execve は失敗します。
execveの関連用語
- execve
- 現在のプロセスを新しいプログラムの実行イメージで置き換えるシステムコール。第一引数に実行ファイルのパス、第二引数に引数の配列 argv、第三引数に環境変数 envp を渡す。成功時は戻らず、エラー時のみ戻ってくる。
- execl
- execの可変引数版。第一引数にパス、続いて argv[0], argv[1], …, NULL を渡す。
- execle
- execlの環境変数 envp を渡せる版。末尾は NULL。
- execlp
- PATH検索を行って実行する版。第一引数は実行ファイル名、PATH内で解決される。
- execv
- 第一引数にパス、第二引数に引数の配列 argv を渡す版。envp は現在の環境を使用する。
- execvp
- PATH検索を用いて見つかった実行ファイルを argv 付きで実行する版。envp は現在の環境を使用。
- execvpe
- PATH検索とenvpを組み合わせた版。PATHで解決した実行ファイルを、envpで指定した環境変数とともに実行する。
- fork
- 新しい子プロセスを作成するシステムコール。親と子で別々の実行を開始し、通常はforkの後にexecを呼んで新しいプログラムを走らせる。
- waitpid
- 子プロセスの終了を待つためのシステムコール。終了ステータスを取得し、並列処理を同期する際に使う。
- _exit
- プロセスを即座に終了させるシステムコール。バッファをフラッシュせず、すぐに終了する。
- exit
- Cライブラリ経由でプロセスを終了させる関数。通常は出力バッファをフラッシュして終了する。
- argv
- execveの第二引数として渡す、プログラムへの引数の配列。argv[0]は通常プログラム名。
- envp
- execveの第三引数として渡す、環境変数の配列。「KEY=VALUE」の形で格納される。
- PATH
- PATH環境変数。コマンド名だけを渡したときに、システムが検索するディレクトリのリストを定義する。
- シェバン
- スクリプトファイルの先頭に '#!' がある場合、実行時に適切なインタプリタで解釈されて実行される仕組み。
- 実行ファイル形式
- 実行ファイルのバイナリ形式。Linux では主に ELF が用いられる。コード・データ・依存ライブラリの情報を含む。
- 動的リンクと ld.so
- 実行時に共有ライブラリをロードして結合する仕組み。動的リンカ/ローダ(ld.so)が関与する。
- プロセスイメージ
- 現在のプロセスのコード・データ・スタック・ヒープなどの集合。execveで新しいプログラムのイメージに置き換えられる。
- システムコール
- OSカーネルに直接要求を送る機能。execveはPOSIX準拠のシステムコール。
- errno
- エラー番号。execveが失敗した場合、ENOENT / EACCES などの値が errno に設定される。



















