Fork
Fork–Exec(英語版)は、UNIXで一般的に使われる手法であり、新たなプログラムをプロセスとして実行する。fork()は親プロセスを2つの同一内容のプロセスに(フォークの先のように)分岐させるシステムコールである。fork()によって子プロセスが親プロセスのコピーとして生成され、子プロセスがexec()システムコールを呼び出すことで(子プロセス)自身の内容を置き換える。
親プロセスが子プロセスの終了を待ち合わせる場合、子プロセスの終了コード (exit code) を受け取ることができる。子プロセスがゾンビプロセスとなるのを防ぐには、親プロセスがwait(英語版)システムコールを使用する必要があり、そのタイミングは定期的でもよいし、SIGCHLDシグナルを受け取った際でもよい。
子プロセスがexec()を呼び出すと、そのアドレス空間の内容は全て失われ、指定されたプログラムを実行するためのアドレス空間のマッピングが新しく設定される。これをオーバーレイと呼ぶ。アドレス空間は全て置き換えられるが、オープン済みファイルのファイル記述子群は close-on-exec が指定されたときだけ exec()時に自動的にクローズされる。この特徴を利用して、fork()を呼び出す前にパイプを作成しておき、exec()で指定された新しいプログラムとの通信を行うというUNIX特有の手法が実現されている。
なお、Microsoft Windows では fork() 単独に相当するシステムコールがなく、fork-exec モデルを採用していない。代わりにspawn()(英語版)ファミリ関数が process.h で定義されており、fork-exec に相当する働きをする。