我正在使用
memfd_create
将文件保存在内存中,但是当我 fork
时,该文件在两个进程之间共享。
是否可以将父级和子级解耦,以便子级在分叉后拥有文件的内存副本?比如当子进程修改文件时,父进程不受影响。
如果没有,我还需要哪些其他选项来将文件保留在内存中(同时仍然使用读/写/查找操作)并在 fork 上创建副本?
我希望在这里不要错,但在孩子身上,
mmap
使用memfd_file
作为标志,然后MAP_PRIVATE
继承了fclose
。这样子进程将拥有文件内容的自己的私有副本(写入时)。如果您希望子级拥有自己的文件副本而不向子级添加更多虚拟内存,我认为您别无选择,只能让父级在fd
之前为子级预先创建一个新的memfd ,将父级memfd的内容复制到子级memfd中,然后
fork
,最后让子级fork
成为父级的fclose
,父级关闭子级的memfd
。换句话说,让父级创建副本