質問 2 に対する簡単な答えは次のとおりforkです。絶対に使用しないでくださいvfork。
質問 1 で何を尋ねているのか正確にはわかりませんvfork。ed プロセスは 2 つのシステム コールしか使用できません:_exitとexecve. (実際には、execファミリーのいずれかを使用できますexecveが、最も一般的なものです。) これらのいずれかを実行すると、デッド ( _exit) またはもはやvfork( exec*) ではなくなり、親はブロックされなくなります。したがって、子が新しい記憶イメージを取得すると、子と親は共存できます。
通常の場合、子は を呼び出そうとしexecveますが、失敗しない限り戻りません。その後すぐに を呼び出します。_exitこれは、 が失敗した場合にのみ発生しexecveます。
子は、子プロセスを適切に設定するためにしばしば必要となるdupまたはを呼び出すことができません。closeメモリを変更することはできません (メモリは親に属しているため)。そのため、ほとんど役に立ちません。
むかしむかし、プロセスの作成は遅かったです。最近では、はるかに高速であり、ほとんどの UNIX ライクな OS (Linux や FreeBSD を含む) は「コピー オン ライト」を使用しています。 . したがって、課せられた制限と提供される安全性の欠如vforkは、もはや役に立ちません。
vforkは 2008 年版で Posix から削除されたため、非推奨と見なす必要があります。
forkそれがパフォーマンスの問題であることが本当にわかった場合posix_spawnは、システムで使用できる場合は、使用を検討する必要があります。(私の知る限り、Linux の最近のバージョンで利用でき、FreeBSD と Solaris でかなり長い間利用できます。) 実際には を呼び出す可能性がありますvforkが、未定義の動作を引き起こすことなく、少なくとも詳細を処理します。