Re: [理工] 关于fork

楼主: HiltonCool (野兽疯)   2014-07-22 01:22:38
※ 引述《cybrog (cybrog)》之铭言:
: main()
: {
: for(i=0;i<4;i++)
: {fork();}
: }
: 有点不懂为什么答案是产生16个process
: main()完之后产生的fork()还会继续产生process?
你可以把main()想像成parent
经过第一次fork(),main()会生出一个child process
此时总共有2个processes,一个是main(),一个是main()的child
经过第二次fork(),main()及main()的child各会再生出他们的child
此时总共有4个processes,以此类推,跑完4次后总共有16个processes
因为上面的程式对于fork()并没有任何条件限制,所以parent与child都会执行
我所谓的条件是像
if(pid==0)
fork();
如果程式是这样的话,那就只有child会执行fork,parent不会执行
: 我的问题是像
: main()
: {
: fork();
: fork();
: fork();
: }
这段程式码就等于
main()
{
for(i=0;i<3;i++)
{
fork();
}
}
其实跟上面的程式码是一样的,只是写法不同而已
: 像这样的fork产生的process不是都是本身之后以下的吗@@
fork()产生的是child process没错
但如果在下一轮的fork()没有任何条件限制的话
则在此轮的所有processes都会执行下一轮的fork()
你也可以想成是在下一轮中,此轮的所有processes都会变成parent process
然后fork()出他们自己的child
: 我表达不太好@@ 不知道有没有人看得懂或解释一下!!
: 感谢!!
作者: cybrog (cybrog)   2014-07-22 21:27:00
了解! 感谢你的帮忙~

Links booklink

Contact Us: admin [ a t ] ucptt.com