在fork中检测子进程创建()

在fork中检测子进程创建()

问题描述:

系统调用fork()会为地址空间创建两个完全相同的副本,一个用于父项,另一个用于子项。在fork中检测子进程创建()

在使用if语句使用fork时,在下面的代码中将创建子进程多少次?

fork(); 
pid=fork(); 
if(pid==0) 
{ 
fork(); 
} 
+0

五次。你需要进一步的解释吗? – Beta

+0

“使两个相同的地址空间副本” - 不,它不。它使一个已经存在的地址空间完全相同。在大多数现代实现中,它甚至没有这样做 - 它只是创建一个新的地址空间,它引用与原始页面相同的所有页面,但将它们标记为写入时复制。 – twalberg

添加一些额外的代码来获得这样的:

#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