105.2標準
準備処理の後、スクリプトのシェルをserverコマンドへ置き換える。
server終了後にシェルへ戻る必要はない。
適切な記述はどれか。
× 不正解
exec COMMANDはforkせず現在のシェルをCOMMANDで置換する。成功すればexecより後のシェル文は実行されない。
詳細解説
正しい
exec server現在のシェルプロセスをserverへ置換し、新しい子シェルを残さない。
正しい。execが成功すると現在のシェルプロセスのプログラム像がserverへ置き換わり、シェルは残らない。
誤り
server &serverをバックグラウンドの子として起動し、元のシェルは継続する。
誤り。&はserverを非同期の子プロセスとして起動し、元のスクリプトは次の文へ進む。
誤り
source serverserverというファイルを現在のシェル言語として読み込もうとする。
誤り。sourceは指定ファイルをシェルコードとして現在環境で評価する機能で、外部serverへプロセスを置換しない。
誤り
export serverserverという変数名を環境へ公開しようとし、コマンドを起動しない。
誤り。exportはシェル変数へ環境継承属性を付ける機能で、serverというコマンドを実行しない。
実際に確かめる
一時的な検証環境で実行できる例です。
bash --noprofile --norc -c 'exec printf replaced; printf not-run'期待される結果
replacedだけを表示理解のポイント
- 現在プロセスを置換
- 成功時は戻らない
- PIDを維持
確認時の注意
- 確認環境: GNU Bash 5.2 / 短命シェル
基礎のおさらい
PID
execによる置換では通常PIDが変わらないため、ラッパーが不要な常駐プロセス起動などに使える。
失敗時
execがコマンドを起動できなければ置換は完了せず、エラー後にシェルが継続し得るため失敗処理も考慮する。
問題IDKP-105-637
確認環境GNU Bash 5.2 / 短命シェル
最終技術確認2026-08-13
誤り・権利侵害を報告