匿名映射页面和fork()?

问题描述:

当一个进程在其地址空间中使用匿名映射页面调用fork()并且子进程修改该页面后,子进程中的匿名映射页面是否基本上像内存映射页面一样起作用?匿名映射页面和fork()?

+0

另请参见[是否与所有进程MMAP共享存储器?](http://*.com/q/11738703/608639),[通过使用MMAP的共享进程之间存储器() ](http://*.com/q/4991533/608639),[如何读取/写入匿名共享映射?](http://*.com/q/31305015/608639)等。 – jww

这取决于传递给mmap的标志。如果指定了MAP_SHARED,则将共享映射页面。如果MAP_PRIVATE,映射的页面不会被共享 - 每个分叉的过程将获得它自己的副本。

MAP_SHARED和MAP_PRIVATE描述了对内存对象的引用的处置方式。如果指定了MAP_SHARED,则写入 引用将更改基础对象。如果指定MAP_PRIVATE为 ,则调用进程 对映射数据所做的修改仅对调用进程可见,并且不得更改基础对象 。在MAP_PRIVATE映射建立 之后完成的底层对象的修改是否可以通过MAP_PRIVATE映射是可见的。可以指定MAP_SHARED或者MAP_PRIVATE,但不能同时指定两个MAP_SHARED或MAP_PRIVATE。在fork()中保留的映射类型为 。

POSIX.1-2001: mmap