首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vfork:了解问题:

vfork:了解问题:
EN

Stack Overflow用户
提问于 2011-07-01 23:14:01
回答 2查看 194关注 0票数 1

我对vfork()的功能感到困惑。我读到在vfork()的情况下,父进程和子进程用于在它们之间共享页面。它不支持任何写入时复制功能。这意味着,如果子进程在其时间片期间进行了一些更改,那么当父进程返回时,所有这些更改都将对父进程可见。还提到,只有当子进程在创建后刚刚执行exec系统调用时,vfork()系统调用才有用。

比方说,子进程使用ls执行exec系统调用。现在,根据exec调用,ls程序将被加载到子进程的地址空间。现在,当父进程的时间片将启动时,它可能会有不同的指令在其PC上执行,这可能会导致该进程的行为不同。

有没有人能向我说明一下这个场景,vfork()调用在这种情况下有什么帮助?

EN

回答 2

Stack Overflow用户

发布于 2011-07-01 23:27:01

vfork()的要点不是为一个子节点分配一个新的地址空间,因为它会立即再次丢弃它。因此,vfork()省略了fork()中为该子进程创建新地址空间(页表和分配)的部分,而是设置了一个标志,execve()将该标志解释为在用新的可执行文件及其请求的初始堆( As )填充该进程之前,应该为该进程分配一个新的页表和堆栈。

票数 1
EN

Stack Overflow用户

发布于 2011-07-13 02:58:23

execve()释放当前进程的内存映射并分配新的内存映射。退出一个进程也会释放该进程的内存映射。

传统上,vfork()会挂起父进程,直到子进程停止使用父进程的内存映射。唯一安全的方法是通过execve()_exit()

比方说,子进程使用ls执行exec系统调用。现在,根据exec调用,ls程序将加载到子进程的地址空间。

实际上,ls将被加载到一个新的地址空间中,父进程的地址空间在子进程上被释放。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6549831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档