0
A
回答
0
叉從管線3,叉發生的位置處開始。
6
fork()通過複製調用進程來創建一個新進程。從
fork(2)
爲[...]
: 新工藝,被稱爲孩子,是 一個確切的重複調用的過程中,被稱爲父,除了 以下幾點它是完全重複的,它也會有相同的指令指針和堆棧。所以孩子會調用fork()
之後。現在,您可能會問,我如何確定當前的計劃是孩子還是父母?查看返回值的手冊頁:
成功時,子進程的PID返回父, 和0的孩子返回。如果失敗,則返回-1在 父,沒有創建子進程,並errno設置爲合適。
所以如果fork()
結果等於0
,你在孩子過程中,如果其大於0
你的父母是,如果它的下面0
你就麻煩了。
請注意,這意味着,每一個代碼是獨立的fork()
結果值,將在都的孩子和家長被執行。所以,如果你是例如創建與16級的進程池中,你應該做的:
for (int i = 0; i < 16; i++) {
pid_t pid = fork()
if (pid == 0) {
do_some_work();
exit(0);
} else if (pid < 0) {
// fork failed
do_some_error_handling();
}
}
如果你錯過了exit(0)
,你會產卵2 16-1處理(在那裏,只是用100代替16沒有樂趣。)
0
當叉的回報,它在這兩個父(返回子進程的PID)和(返回0)的孩子返回。執行繼續從父母和孩子那裏。
這樣,典型的使用叉的是這樣的:
if (0 == (child = fork()))
// continue as child.
else
// Continue as parent.
0
相關問題
- 1. 在分岔期間,孩子的執行到底在哪裏開始?
- 2. 在哪裏添加孩子?
- 3. 從哪裏開始進行QuickBooks開發?
- 4. 從哪裏開始進行WSN開發
- 5. - 從哪裏開始?
- 6. 從哪裏開始
- 7. 開始從哪裏開始移植?
- 8. python從哪裏開始執行代碼?
- 9. 從哪裏開始進行TCP通信?
- 10. 從哪裏開始使用二叉搜索樹?
- 11. 使用叉子做一些事情,而孩子正在運行
- 12. 從哪裏開始C#
- 13. Jruby從哪裏開始?
- 14. 從哪裏開始Python
- 15. nodejs從哪裏開始?
- 16. XNA從哪裏開始?
- 17. 從哪裏開始Android Android
- 18. 從哪裏開始Rails
- 19. 崩潰 - 從哪裏開始?
- 20. 從哪裏開始 - android?
- 21. Hashtable/Map:從哪裏開始
- 22. 從哪裏開始Magento?
- 23. 從哪裏開始聯網
- 24. Mean.js,我從哪裏開始?
- 25. Silverlight MVVM從哪裏開始
- 26. 從哪裏開始NodeJS?
- 27. dealloc從哪裏開始?
- 28. 從哪裏開始春季?
- 29. XSLT從哪裏開始?
- 30. .NET 3D,從哪裏開始?
子進程和父進程幾乎分叉後的相同,這意味着這兩個孩子和家長將繼續從行執行後叉'()'。 – nhahtdh
這個問題是用極低的質量制定的。請問我們什麼時候請多考慮10秒。 –
因此,不是花時間寫完這個問題,而是沒有做出基本的printf()調試來解決這個問題?這裏是代碼:int main(void){printf(「starting \ n」); switch(fork()){case 0:printf(「分叉進程\ n」);打破;默認:printf(「父進程\ n」); break;} exit(0); } – tbert