インターフェースを簡素化するためです。の代替手段はfork
、exec
Windowsの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.
に書かれていることに注意してください。