fork程序數的問題

2021-07-25 10:09:30 字數 891 閱讀 2960

#include

int main()

問除了第乙個父程序,這個程式到底建立了多少程序?

這道題主要考了兩個知識點,一是邏輯運算子執行的特點;二是對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個新程序

fork程序建立

fork建立子程序,fork函式返回兩個值,當為0時,則認為是子程序 塊執行區域,而不為0則是父程序 塊執行區域。我們需要知道的是,fork子程序可以與父程序共享部分程序上下文,而與此不同的是execl函式,一旦開始執行到execl函式時,啟動被呼叫的函式,後面的 則不再執行,而是直接執行呼叫的程式...

fork程序相關

include include include include include int main int argc,char argv if pid 0 else if pid 0 return 0 列印如下。i am father i am son i am father i am son i a...

fork建立程序

1.程序的建立 fork 函式是建立子程序的函式,在主函式中呼叫fork會產生乙個子程序 列印出來的結果是 if語句是條件語句但卻兩個都列印了,兩個條件都滿足,也就是說兩個都執行,但卻不是一條執行流,那麼可以得出肯定還有乙個程序在列印另乙個。都記得fork 之後有兩個程序,乙個父程序,乙個子程序,父...