求解可以采用如下的方式
i = 2的情況,在Ubuntu下能打印出6個(gè)*

PRintf(“/n”) 與否例子




fork調(diào)用的一個(gè)奇妙之處就是它僅僅被調(diào)用一次,卻能夠返回兩次,它可能有三種不同的返回值: 1)在父進(jìn)程中,fork返回新創(chuàng)建子進(jìn)程的進(jìn)程ID; 2)在子進(jìn)程中,fork返回0; 3)如果出現(xiàn)錯誤,fork返回一個(gè)負(fù)值;
fork出錯可能有兩種原因: 1)當(dāng)前的進(jìn)程數(shù)已經(jīng)達(dá)到了系統(tǒng)規(guī)定的上限,這時(shí)errno的值被設(shè)置為EAGAIN。 2)系統(tǒng)內(nèi)存不足,這時(shí)errno的值被設(shè)置為ENOMEM。

在main這個(gè)主進(jìn)程中,首先執(zhí)行 fork() || fork(), 左邊的fork()返回一個(gè)非零值,根據(jù)||的短路原則,前面的表達(dá)式為真時(shí),后面的表達(dá)式不執(zhí)行,故包含main的這個(gè)主進(jìn)程創(chuàng)建了一個(gè)子進(jìn)程, 由于子進(jìn)程會復(fù)制父進(jìn)程,而且子進(jìn)程會根據(jù)其返回值繼續(xù)執(zhí)行,就是說,在子進(jìn)程中, fork() ||fork()這條語句左邊表達(dá)式的返回值是0, 所以||右邊的表達(dá)式要執(zhí)行,這時(shí)在子進(jìn)程中又創(chuàng)建了一個(gè)進(jìn)程, 即main進(jìn)程->子進(jìn)程->子進(jìn)程,一共創(chuàng)建了3個(gè)進(jìn)程。


父進(jìn)程和子進(jìn)程關(guān)于數(shù)據(jù)和文件描述符的繼承
http://blog.csdn.net/sharelearner/article/details/9705319
新聞熱點(diǎn)
疑難解答