2011-07-20 62 views

回答

3

嘗試繪製過程中創建的樹和學習/請記住以下幾點:

P1。 fork()將pid(大於tan 0)返回到當前進程 ,並在子進程中返回0。 P2385。你將需要知道如何評估 表達式A() && B() || C();例如,如果A()返回 0 (false)功能B將不會被評估,因爲0 && whatever是 總是0

現在,讓我們的標籤調用,爲便於參考:

Main() 
{ 
    Fork() /*[1]*/; 
    Fork() /*[2]*/ && fork()/*[3]*/ || fork()/*[4]*/; 
    Fork()/*[5]*/; 
} 

我會畫工藝創作的第一級(和一點的第二級):

      [0] 
       / / \  \ 
       [1] [2] [3] [5] 

      /| \ 
      [2] [3] [5] 

以上樹意味着進程[0](初始進程)將執行編號爲1,2,3和5的函數fork()。爲什麼沒有process [0]運行fork()[4]?由於fork()[2] && fork[3]已經評估爲真,因此沒有要評估的點fork()[4]

將類似的概念應用於第二級的fork[1]分叉的進程,以瞭解爲什麼進程fork[4]未被調用。

您可以通過在進程創建樹的每個級別應用P1和P2來完成進程創建樹。

1

請記住fork有一個返回值,即0或PID(不記得孩子是否獲得PID或父級)。所以& &和||當返回PID時,操作員將評估爲true,在這種情況下會分叉更多的進程。希望幫助

相關問題