//--------------------------------------------------------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調用算法的,就是說他們誰先執行都有可能。