在*nix系统中,通过使用fork()系统调用来创建进程。例如,init进程创建另一个进程。首先它复制自身并创建一个具有init上下文的进程。只有在调用exec()时,这个子进程才会变成一个新进程。那么为什么需要中间步骤(使用与父进程相同的上下文创建子进程)呢?难道这不是浪费时间和资源吗,因为我们正在创建一个上下文(消耗时间和浪费内存),然后再进行覆盖吗?
为什么不能实现为分配空闲内存区域,然后调用exec()?这样可以节省时间和资源,对吧?
为什么不能实现为分配空闲内存区域,然后调用exec()?这样可以节省时间和资源,对吧?
exec
。这个exec
将吹掉所有克隆所花费的努力,所以OP提出的问题是,我们为什么要在第一次克隆时费心去克隆呢? - user4815162342posix_spawn
以fork+exec为基础,因此对两者进行比较是没有意义的。但它不必一定采用这种方式实现。vfork
的存在表明,至少在历史上,fork
有时被认为是有问题的。 - user4815162342