為什麼fork會返回兩次?
由於在複製時複製了
父程序的
堆疊段,所以兩個程序都停留在fork函式中,等待返回。因此fork函式會返回兩次,一次是在父程序中返回,另一次是在子程序中返回,這兩次的返回值是不一樣的。過程如下圖。
fork呼叫的乙個奇妙之處就是它僅僅被呼叫一次,卻能夠返回兩次,它可能有三種不同的返回值:
在父程序中,fork返回新建立子程序的程序id;
在子程序中,fork返回0;
如果出現錯誤,fork返回乙個
負值。在fork函式執行完畢後,如果建立新程序成功,則出現兩個程序,乙個是子程序,乙個是父程序。在子程序中,fork函式返回0,在父程序中,fork返回新建立子程序的程序id。我們可以通過fork返回的值來判斷當前程序是子程序還是父程序。
引用一位網友的話來解釋fork函式返回的值為什麼在父子程序中不同。「其實就相當於鍊錶,程序形成了鍊錶,父程序的fork函式返回的值指向子程序的程序id, 因為子程序沒有子程序,所以其fork函式返回的值為0.
呼叫fork之後,資料、堆、棧有兩份,**仍然為乙份但是這個**段成為兩個程序的共享**段都從fork函式中返回,箭頭表示各自的執行處。當父子程序有乙個想要修改資料或者堆疊時,兩個程序
真正**
。
關於兩次fork
兩次fork 的作用 首先,要了解什麼叫殭屍程序,什麼叫孤兒程序,以及伺服器程序執行所需要的一些條件。兩次fork 就是為了解決這些相關的問題而出現的一種程式設計方法。孤兒程序 孤兒程序是指父程序在子程序結束之前死亡 return 或exit 如下圖1所示 在一定時間內,當系統發現孤兒程序時,ini...
關於兩次fork
兩次fork 的作用 首先,要了解什麼叫殭屍程序,什麼叫孤兒程序,以及伺服器程序執行所需要的一些條件。兩次fork 就是為了解決這些相關的問題而出現的一種程式設計方法。孤兒程序 孤兒程序是指父程序在子程序結束之前死亡 return 或exit 如下圖1所示 在一定時間內,當系統發現孤兒程序時,ini...
關於兩次fork
我覺得這裡還有些重要的東西沒講,比如setsid 參見apne 8 11.兩次fork 的作用 首先,要了解什麼叫殭屍程序,什麼叫孤兒程序,以及伺服器程序執行所需要的一些條件。兩次fork 就是為了解決這些相關的問題而出現的一種程式設計方法。孤兒程序 孤兒程序是指父程序在子程序結束之前死亡 retu...