【发布时间】:2016-10-08 07:39:56
【问题描述】:
我正在阅读 Robert Love 的“Linux 内核开发,第二版”。 (是的,它有点过时了)。我从第 3 章:进程管理中了解到,在 COW(写时复制)中,父进程和子进程共享父进程的地址空间,直到其中一个进程写入地址空间。这是为了防止父地址空间在没有被写入时不必要的重复。
但是,它提到如果子进程在fork() 之后立即调用exec(),则不需要复制父进程的地址空间和页面并将其作为单独的副本提供给子进程。那就是我迷路的地方。
根据手册,“exec() 系列函数用新的进程映像替换当前进程映像。” 手册没有说明exec() 创建新地址新过程映像的空间。因此,如果子进程与其父进程共享地址空间,这是否意味着exec() 会将可执行映像加载到父进程的地址空间(与子进程共享)?
由于这意味着父地址空间将被覆盖,我不明白在fork() 之后执行exec() 的子进程如何不需要其父地址空间的单独副本来写入。我这里有什么遗漏吗?
【问题讨论】:
标签: linux linux-kernel