<分区>
一个进程fork
一个子进程,并在子进程中调用exec()
。
使用写时复制,在 fork
之后,父进程和子进程共享内存。
当子进程调用exec()
加载另一个进程时,Linux会不会将父内存复制到新内存,子进程也将加载另一个进程到这 block 新内存?如果是这样,是否意味着使用写时复制 fork 的进程在执行 fork-exec 时没有数据?
标签 c linux fork exec copy-on-write
<分区>
一个进程fork
一个子进程,并在子进程中调用exec()
。
使用写时复制,在 fork
之后,父进程和子进程共享内存。
当子进程调用exec()
加载另一个进程时,Linux会不会将父内存复制到新内存,子进程也将加载另一个进程到这 block 新内存?如果是这样,是否意味着使用写时复制 fork 的进程在执行 fork-exec 时没有数据?
最佳答案
With copy-on-write, after
fork
the parent process and child process share the memory.
阅读是,写作不是。为 fork 的子进程创建一个新的地址空间,只是在子进程写入它之前不会填充它。
如果 fork()
紧跟 exec()
,则通常在 fork()
时为子进程创建的地址空间是未使用但被新的替换,即为 exec ()
ed 进程创建的那个。
关于c - 写时复制如何在 fork-exec 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37496075/