http://blog.csdn.net/hs794502825/article/details/10242091函數
問題是不算main這個進程自身,程序到底建立了多少個進程?spa
這是EMC的一道筆試題,感受挺有意思的,這道題主要考了兩個知識點,一是邏輯運算符運行的特色;二是對fork的理解
若是有一個這樣的表達式:cond1 && cond2 || cond3 這句代碼會怎樣執行呢?
一、cond1爲假,那就不判斷cond2了,接着判斷cond3
二、cond1爲真,這又要分爲兩種狀況:
a、cond2爲真,這就不須要判斷cond3了
b、cond2爲假,那還得判斷cond3
fork調用的一個奇妙之處在於它僅僅被調用一次,卻可以返回兩次,它可能有三種不一樣的返回值:
一、在父進程中,fork返回新建立子進程的進程ID;
二、在子進程中,fork返回0;
三、若是出現錯誤,fork返回一個負值(題幹中說明了不用考慮這種狀況)
在fork函數執行完畢後,若是建立新進程成功,則出現兩個進程,一個是子進程,一個是父進程。在子進程中,fork函數返回0,在父進程中,fork返回新建立子進程的進程ID。咱們能夠經過fork返回的值來判斷當前進程是子進程仍是父進程。
有了上面的知識以後,下面咱們來分析fork() && fork() || fork()會建立幾個新進程.net
很明顯fork() && fork() || fork()建立了4個新進程blog
總結:進程
第一註釋行的fork生成1個新進程
第二註釋行的三個fork生成4+4=8個新進程
第三註釋行的ork會生成10個新進程(這是由於前面總共有10個進程,調用一次fork生成10個新進程)get
因此一共會生成1+8+10=19個新進程io