fork() && fork() || fork()

 

http://blog.csdn.net/hs794502825/article/details/10242091函數

 

  1. #include <unistd.h>  
  2. #include <stdio.h>  
  3. int main()  
  4. {  
  5.         fork();/*****/  
  6.         fork() && fork() || fork();/*****/  
  7.         fork();/*****/  
  8.         sleep(100);  
  9. return 0;  
  10. }  

 

 

 

問題是不算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

相關文章
相關標籤/搜索