主要原因可能是fork()和/和exec()步骤的分离允许使用其他系统调用来完成子环境的任意设置.例如,您可以:
......还有更多.如果要将这些调用组合到一个spawn()调用中,则必须具有非常复杂的接口,以便能够对子环境中所有这些可能的更改进行编码 - 如果您添加了新设置,则需要接口要改变.在另一方面,独立fork()和exec()步骤,使您可以使用普通的系统调用(open(),close(),dup(),fcntl(),...)来操纵孩子的环境之前exec().capset()很容易支持新功能(例如).
fork 和 exec 做完全不同的事情。
有很多理由只使用其中之一而不使用另一个。您可以派生代表您的控制父应用程序执行任务的子进程,例如,这在 UNIX 世界中很常见。例如,您可以为其他一些奇怪的应用程序设置先决条件,然后从启动器应用程序中执行它,而无需使用 fork。