【发布时间】:2012-08-15 05:11:23
【问题描述】:
在阅读“Linux 内核开发”后,我看到了下一条语句:
传统上,在
fork()上,父级拥有的所有资源都是重复的,并且 复制给孩子。这种方法幼稚且效率低下,因为它复制了很多 否则可能会被共享的数据。更糟糕的是,如果新进程要立即 执行一个新图像,所有的复制都会浪费
为什么fork() 需要复制所有父母的资源?为什么我们不能简单地为新进程所需的所有资源分配新的空间块?为什么需要抄袭?最后一个查询 - 如果新进程要立即执行新图像,为什么复制会浪费?
【问题讨论】:
-
一段时间以来,fork() 的一个变体称为 vfork(),pubs.opengroup.org/onlinepubs/7908799/xsh/vfork.html,它不会复制资源。它旨在用于表单后跟 exec() 的情况。问题是,如果 exec() 调用失败怎么办?子进程没有自己的资源(内存、文件描述符)来进行错误报告或错误处理。
标签: linux linux-kernel fork