歡迎您光臨本站 註冊首頁

linux中fork創建進程講解

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0
大家知道Linux中創建子進程的一個很好的方法是函數調用fork,但是很多初學者對fork的理解上可能有點困難.我們舉個例子來看看fork的用法吧.
大家用fork的時候記住fork是「分叉」的意思就很好理解了.
記得初學fork() 函數及遇到這個函數時,總是不能理解fork為什麼會這樣寫,就會分成父子兩個進程.
先看一下fork() 的經典模式
//--------------------------------------------------------begin
int pid=fork();
if(pid < 0){
//失敗,一般是該用戶的進程數達到限制或者內存被用光了
........
}
else if(pid == 0){
//子進程執行的代碼
......
}
else{
//父進程執行的代碼
.........
}
.........
//-------------------------------------------------------end
(這段代碼可能是有點問題的,稍後解釋),首先來看fork 的返回值,有三種情況 -1,0,>0
-1: 當然是失敗了,也不會分裂成兩個進程. 返回0是子進程,返回〉0 是父進程,此時返回的值當然是資進程的pid了. 這裡是比較難理解的一個地方,他的可以這樣簡單的解釋: 當進程遇到fork調用時,將此進程整個拷貝一份,即子進程.此時,該進程的返回值被設置為〉0,即剛才 拷貝生成的子進程pid,而在拷貝生成的進程中,將返回值設置為0 .也就是此時已經有兩個進程,只有pid的值不同(忽略一起其他的設置).
此時,兩個進程都從fork開始往下執行,只是pid不同, if ..... else if .... esle 會根據pid不同來執行相應的代碼,並不是說某一部分是父進程的代碼,某一部分是自進程的代碼. 只是一些條件判斷而已.當fork后,真箇代碼都會被兩個進程執行,只是(fork成功時)子進程中的pid 為零, else if條件成立,其它兩個不成立,執行else if中的代碼.父進程中pid >0的,else成立,執行其中的代碼. 如果for()k失敗,當然是返回-1,此時是沒有子進程的.


[火星人 ] linux中fork創建進程講解已經有839次圍觀

http://coctec.com/docs/linux/show-post-53664.html