首页 文章

关于COW在linux中分叉

提问于
浏览
0

在linux中,我知道它是由COW实现的,因为浪费 . 但是,在书中说,当child在fork()之后调用exec()时,地址空间永远不会被复制 . 但我认为如果孩子使用exec(),则意味着在地址空间中创建尚未复制的新数据或代码 . 因此,当调用exec()时,会复制地址间隔(写入时复制),并在此处写入新数据或代码 .

我错了吗?为什么exec()调用永远不会复制父项的东西?

或者如果child调用exec(),那么child只需创建自己的mm_struct并在他自己的新地址空间中写入新数据?(不是从父项复制)

1 回答

  • 1

    exec是execve内核调用的库包装器 . 在execve启动之前会有一些堆栈活动(即使直接调用execve),因此在exec启动与进程上下文断开连接之前,至少会有一个堆栈块被复制 .

    同时,在孩子断开连接之前,父进程将在写入时进行大量复制 .

相关问题