在fork中检测子进程创建()
问题描述:
系统调用fork()
会为地址空间创建两个完全相同的副本,一个用于父项,另一个用于子项。在fork中检测子进程创建()
在使用if语句使用fork时,在下面的代码中将创建子进程多少次?
fork();
pid=fork();
if(pid==0)
{
fork();
}
答
添加一些额外的代码来获得这样的:
#include <stdio.h>
#include <unistd.h>
int main()
{
pid_t pid;
pid = fork();
if (pid != 0) printf("%d\n", pid);
pid = fork();
if (pid != 0) printf("%d\n", pid);
if(pid==0)
{
pid = fork();
if (pid != 0) printf("%d\n", pid);
}
return 0;
}
然后编译,执行,检查其输出:5子进程的ID。
五次。你需要进一步的解释吗? – Beta
“使两个相同的地址空间副本” - 不,它不。它使一个已经存在的地址空间完全相同。在大多数现代实现中,它甚至没有这样做 - 它只是创建一个新的地址空间,它引用与原始页面相同的所有页面,但将它们标记为写入时复制。 – twalberg