【发布时间】:2017-03-06 16:56:44
【问题描述】:
fork() 系统调用会生成两个相同的地址空间副本,一个用于父级,另一个用于子级。
在if语句中使用fork时,下面的代码会创建多少次子进程?
fork();
pid=fork();
if(pid==0)
{
fork();
}
【问题讨论】:
-
五次。需要进一步解释吗?
-
“制作两个相同的地址空间副本” - 不,它没有。它制作了一个已经存在的地址空间的相同副本。在大多数现代实现中,它甚至不这样做 - 它只是创建一个新的地址空间,该地址空间引用与原始页面相同的所有页面,但将它们标记为写时复制。