execve・とは?初心者向けに解説するLinuxの実行系コールのしくみと使い方共起語・同意語・対義語も併せて解説!

  • このエントリーをはてなブックマークに追加
execve・とは?初心者向けに解説するLinuxの実行系コールのしくみと使い方共起語・同意語・対義語も併せて解説!
この記事を書いた人

高岡智則

年齢: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 に設定される。

execveのおすすめ参考サイト


インターネット・コンピュータの人気記事

awstatsとは?初心者でもわかる使い方と基本解説共起語・同意語・対義語も併せて解説!
14083viws
bing・とは?初心者のための基本ガイド:検索エンジンの仕組みと使い方共起語・同意語・対義語も併せて解説!
1944viws
着信転送とは?初心者向けガイドで分かる使い方と設定のコツ共起語・同意語・対義語も併せて解説!
840viws
リマインドメールとは?初心者にもわかる基本ガイドと使い方のコツ共起語・同意語・対義語も併せて解説!
581viws
com端子・とは?初心者にも分かる基礎ガイド|シリアルポートの使い方と歴史を解説共起語・同意語・対義語も併せて解説!
568viws
充電アダプターとは何かを徹底解説|初心者でも分かる基本と選び方のコツ共起語・同意語・対義語も併せて解説!
535viws
pinロックとは?初心者が知っておくべき基本と使い方ガイド共起語・同意語・対義語も併せて解説!
527viws
asp・とは?初心者向けに徹底解説する基本と使い方ガイド共起語・同意語・対義語も併せて解説!
457viws
16進数カラーコード・とは?初心者でもつまずかない基礎と使い方ガイド共起語・同意語・対義語も併せて解説!
440viws
ローカルポート・とは?初心者にも分かる基本と使い方ガイド共起語・同意語・対義語も併せて解説!
423viws
7zファイル・とは?初心者でもわかる使い方と特徴を解説共起語・同意語・対義語も併せて解説!
364viws
全角文字とは?初心者向け解説|全角と半角の違いをやさしく学ぶ共起語・同意語・対義語も併せて解説!
345viws
差し込み印刷・とは?初心者でもすぐわかる使い方と仕組みガイド共起語・同意語・対義語も併せて解説!
340viws
ワンタイムコード・とは?初心者でも分かる基本と使い方ガイド共起語・同意語・対義語も併せて解説!
319viws
select句・とは?初心者でも分かるSQLの基本と使い方共起語・同意語・対義語も併せて解説!
301viws
ダイレクトチャットとは?初心者向けガイドで使い方と注意点を徹底解説共起語・同意語・対義語も併せて解説!
295viws
csvダウンロードとは?初心者が今すぐ使える基本ガイド共起語・同意語・対義語も併せて解説!
294viws
none とは?初心者にもやさしく解説する意味と使い方ガイド共起語・同意語・対義語も併せて解説!
292viws
解像度スケールとは?初心者でも分かる解像度スケールの基礎と使い方共起語・同意語・対義語も併せて解説!
273viws
sha256とは?初心者が知るべき暗号ハッシュの基礎と使い道共起語・同意語・対義語も併せて解説!
234viws

新着記事

インターネット・コンピュータの関連記事