一道fork 建立了幾個程序的題目(轉的)
阿新 • • 發佈:2019-01-25
- #include
- #include
- int main()
- {
- fork();
- fork() && fork() || fork();
- fork();
- sleep(100);
- return 0;
- }
問題是不算main這個程序自身,程式到底建立了多少個程序?
這是EMC的一道筆試題,感覺挺有意思的,這道題主要考了兩個知識點,一是邏輯運算子執行的特點;二是對fork的理解
如果有一個這樣的表示式:cond1 && cond2 || cond3 這句程式碼會怎樣執行呢?
1、cond1為假,那就不判斷cond2了,接著判斷cond3
2、cond1為真,這又要分為兩種情況:
a、cond2為真,這就不需要判斷cond3了
b、cond2為假,那還得判斷cond3
fork呼叫的一個奇妙之處在於它僅僅被呼叫一次,卻能夠返回兩次,它可能有三種不同的返回值:
1、在父程序中,fork返回新建立子程序的程序ID;
2、在子程序中,fork返回0;
3、如果出現錯誤,fork返回一個負值(題幹中說明了不用考慮這種情況)
在fork函式執行完畢後,如果建立新程序成功,則出現兩個程序,一個是子程序,一個是父程序。在子程序中,fork函式返回0,在父程序中,fork返回新建立子程序的程序ID。我們可以通過fork返回的值來判斷當前程序是子程序還是父程序。
有了上面的知識之後,下面我們來分析fork() && fork() || fork()會建立幾個新程序
很明顯fork() && fork() || fork()建立了4個新程序
總結:
第一註釋行的fork生成1個新程序
第二註釋行的三個fork生成4+4=8個新程序
第三註釋行的ork會生成10個新程序(這是因為前面總共有10個程序,呼叫一次fork生成10個新程序)
所以一共會生成1+8+10=19個新程序