1
A
回答
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,在這種情況下會分叉更多的進程。希望幫助
相關問題
- 1. 使用fork()可在此代碼中創建多少個進程
- 2. 在以下代碼中創建了多少個子進程
- 3. 此程序創建了多少個進程?
- 4. 解釋創建了多少個進程?
- 5. Unix fork:創建了多少個進程?
- 6. 這段代碼創建了多少個變量C的副本?
- 7. 在條件中使用fork()時程序中創建了多少個進程?
- 8. 在下面的代碼中創建了多少個String對象?
- 9. 在下面的代碼中創建了多少個對象?
- 10. 此代碼的進程創建樹?
- 11. 從deamon創建一個分叉進程
- 12. 用這些fork()語句創建了多少個進程?
- 13. 這個程序創建了多少個進程,包括最初的父進程?
- 14. 將創建多少個進程fork()exec()
- 15. 創建java分段代碼
- 16. 這段代碼要生成多少個進程?
- 17. gcc使用了多少遍代碼?
- 18. 用Perl的舞者在子進程中分叉運行代碼
- 19. 使用此代碼創建多個彈出窗口
- 20. 在此代碼段中使用NSThread
- 21. 如何判斷Linux二進制文件在沒有源代碼的情況下創建了多少個線程?
- 22. 此代碼是否會導致父進程成功創建兩個子進程?
- 23. 在此GAE應用程序中,每個請求創建多少個對象?
- 24. 陣列在這段代碼中複製了多少次?
- 25. 創建多少個線程?
- 26. 如何在分叉多個進程時使用wait()函數?
- 27. 該程序創建了多少個進程,以及它們由哪些進程創建?
- 28. C - 使用管道,選擇,分叉和execl創建進程樹
- 29. 前叉:進程數創建
- 30. 如何使用此代碼段創建臨時表?
只是爲了澄清,fork()和Fork()意味着相同的函數調用? – Alvin