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