根据维基百科(可能是错误的)
当发出 fork() 系统调用时,将创建与父进程对应的所有页面的副本,并由操作系统为子进程加载到单独的内存位置。但在某些情况下不需要这样做。考虑当孩子执行“exec”系统调用(用于从 C 程序中执行任何可执行文件)或在 fork() 之后很快退出的情况。当只需要子进程为父进程执行命令时,不需要复制父进程的页面,因为 exec 将调用它的进程的地址空间替换为要执行的命令。
在这种情况下,将使用一种称为写时复制 (COW) 的技术。使用这种技术,当发生分叉时,不会为子进程复制父进程的页面。相反,页面在子进程和父进程之间共享。每当进程(父进程或子进程)修改页面时,都会为执行修改的进程(父进程或子进程)单独制作该特定页面的单独副本。然后,此过程将使用新复制的页面,而不是在所有未来引用中共享的页面。另一个进程(没有修改共享页面的进程)继续使用页面的原始副本(现在不再共享)。这种技术被称为写时复制,因为当某些进程写入时页面被复制。
似乎当任何一个进程尝试写入页面时。页面的新副本被分配并分配给产生页面错误的进程。原始页面随后被标记为可写。
我的问题是:如果在任何进程尝试写入共享页面之前多次调用分叉会发生什么?