子进程与父进程共享哪些资源?
答:复制出来的子进程的task_struct结构与系统的堆栈空间是与父进程独立的,但其他资源却是与父进程共享的,比如文件指针,socket描述符等。不同的进程使用不同的地址空间,子进程被创建之后,父进程的全局变量、静态变量和 fork 处的静态变量会复制到子进程的地址空间中,自此以后,二者开始“各行其是”,互不干扰,所以,所有的“变量”都将各自独立
当父进程调用fork()创建子进程之后,下列哪些变量在子进程中修改之后,父进程里也会相应地作出改动?
A.全局变量
B.局部变量
C.静态变量
D.文件指针
http://blog.csdn.net/hikaliv/article/details/4276758
for( i = 0; i < 5; i++ )
if( fork() == 0 )
continue;
共生成多少个子进程?
如上图所示,这就是一个二项树,二项树结点的计算公式为 2^n - 1,当 n = 5 时,结果为 31。
但是二项树计算的节点的数目,所以用二项树不太明白
但是有人建议的计算方法很不错1+2+4+8+16 = 31
就主线程而言,当i=4时,只创建了一个字线程;
i =3 ,共创建了2
i=2,1+2+1=4
i=1,1+2+4+1=8
i = 0,1+2+4+8+1 = 16