fork的问题.

fork的问题.

fork一次后,会生成一个子程序,如果我循环两次,为什么会生产3个子程序呢?
for($i=0;$i<2;$i++){
    if($pid=fork())
        {
            $test{$pid}=$pid;
        }
      else
        {
           ;  
        }

}
foreach(keys %test){
  print "=>$_\n";
}


执行结果
mrtg# ./thead.pl
=>18414
=>18415
=>18416
=>18414



请问,这如何理解啊?有点晕了.....

谢谢解答!!!!
子又生孙,孙又生子,子子孙孙无穷尽也。
不明白.我的fork应该是在父进程执行的吧....应该生产的还是子进程吧!!!!!
望指点....
第一次循环后fork出来的子进程在第二次循环中依然可以fork
第一次fork的结果是产生进程a b (b由a fork而来)
a b 都会继续执行第二次循环
所以又fork出来两个进程
所以一共是四个
你可以画个Process graph看一下(这个在csapp中讲述的很详细)
那第二次循环后,应该是a c喽....父进程PID是不变的,对吧?
对了,兄弟提的csapp,是什么啊?能否给个链接,或者其他详细点的资料啊?
感谢!!!!!
Computer architecture
--- From a program's perspective
中文叫深入理解计算机体系

挺好的