关于COW在linux中分叉

时间:2016-01-19 07:49:32

标签: linux process fork copy-on-write

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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