exec
プロセスの中身を別のプログラムに入れ替えるシステムコール。プロセスは同じで、コードだけが新しくなる。
fork()が新しいプロセスを作るのに対し、exec()はプロセスそのものは保ったまま、メモリを破棄し、新しい実行ファイルを読み込み、そのエントリポイントから開始する。PID、開いているファイル記述子、作業ディレクトリは引き継がれる。成功した場合、この呼び出しは戻ってこない。戻るべきコードがもう残っていないからだ。
forkしてからexecする組み合わせがUnixのプログラム起動の流儀で、二つに分かれているのには意図がある。両者の間に、子プロセスは新しいプログラムに適用すべき設定を変えられる。標準出力のリダイレクト、環境変数の設定、権限の放棄などだ。>を含むコマンドを打ったとき、シェルがやっているのがまさにそれである。