インターフェースを簡素化するためです。の代替手段はfork、execWindowsのCreateProcess関数のようなものです。パラメーターの数に注意CreateProcessしてください。それらの多くは、さらに多くのパラメーターを持つ構造体です。これは、新しいプロセスについて制御したいすべてのものをに渡す必要があるためCreateProcessです。実際、CreateProcess十分なパラメーターがないため、MicrosoftはCreateProcessAsUserとCreateProcessWithLogonWを追加する必要がありました。
ではfork/execモデル、あなたはすべてのこれらのパラメータは必要ありません。代わりに、プロセスの特定の属性がにわたって保持されexecます。これは、あなたがすることができfork、その後、あなたは(あなたが通常使用していたものと同じ機能を使用して)したい属性、およびどんなプロセス変更、その後 exec。Linuxでは、forkパラメーターはなく、execve実行するプログラム、それを提供するコマンドライン、およびその環境のみが3つあります。(他のexec関数もありますが、それらはexecve一般的なユースケースを簡素化するためにCライブラリによって提供される単なるラッパーです。)
あなたは別のカレントディレクトリを使用してプロセスを開始する場合: fork、chdir、exec。
stdin / stdout:をリダイレクトしたい場合fork、ファイルを閉じたり開いたりしますexec。
ユーザーを切り替えたい場合は:fork、setuid、exec。
これらはすべて、必要に応じて組み合わせることができます。誰かがプロセス属性の新しい種類を思い付く場合は、変更する必要はありませんforkとexec。
larsksが述べたように、現代のUnixのほとんどはコピーオンライトを使用forkしているため、大きなオーバーヘッドは発生しません。
fork(2)Linux のマニュアルページには次のようUnder Linux, fork() is implemented using copy-on-write pages, so the only penalty that it incurs is the time and memory required to duplicate the parent's page tables, and to create a unique task structure for the child.に書かれていることに注意してください。