天天看點

對fork函數的了解

//--------------------------------------------------------begin

int pid=fork();

if(pid < 0){

//失敗,一般是該使用者的程序數達到限制或者記憶體被用光了

........

}

else if(pid == 0){

//子程序執行的代碼

......

}

else{

//父程序執行的代碼

.........

}

.........

//-------------------------------------------------------end

對fork函數的疑惑:

對于上面一段代碼,剛開始讀的時候,不能了解的是執行一次fork,為什麼if和elseif語句都會執行。

對fork函數疑惑的解決:

http://binux.blog.51cto.com/742827/163234通過這個網址和課本上的介紹,最後自己想明白了。

fork函數的調用會有兩種情況:

如果函數調用失敗時,它會傳回-1,直接運作else的可能;

如果函數調用成功的話,它會分裂成兩個程序,所謂的分裂成兩個程序,指的是建立一個新的程序,也就是子程序。在fork函數調用時,将進行從父程序虛空間到子程序虛空間的拷貝,兩個程序的代碼段和使用者資料段是完全相同的,并且兩個程序的系統資料段也是相同的。然後兩個程序同時進行,父程序fork函數傳回子程序的pid,子程序傳回0.

子程序,因為可以通過getpid() 和getppid()擷取自己的程序和父程序的pid; 父程序中,此為fork()的子程序pid,因為程序中沒有可以擷取自己子程序pid的系統調用。此時就要把傳回的pid儲存起來,以後用來控制子程序。例如程式退出時調用kill(pid,9)殺死自己的子程序。 fork之後是父程序先執行還是子程序先執行,這是取決于cpu調用算法的,就是說他們誰先執行都有可能。

繼續閱讀