Linux中fork和exec是什麼?有何區別?

老男孩IT教育機構發表於2023-01-03

  在學習任何技術的時候,很多人經常會因為搞不懂專業術語而犯愁,甚至也經常因為兩個相似的專業術語摸不著頭腦,比如:Linux中fork和exec。fork和exec都是和程式相關的呼叫,而且都執行相同的程式。那麼Linux中fork和exec有什麼區別?詳細內容請看下文。

  fork

  呼叫fork可以建立一個新的程式稱為子程式,呼叫fork函式的程式稱為父程式,子程式的所有內容都和父程式相同,除了pcd,如果這兩個程式都沒有對記憶體做寫操作的話,那麼兩個程式共享呼叫fork函式的程式的記憶體頁,這樣表面上看fork建立程式比exec建立程式快。但只要兩個程式其中一個對記憶體做了修改,那麼在修改之前,就會把記憶體頁複製一份給子程式用。

  exec

  呼叫exec建立程式,實際上不是建立程式,更準確的說是載入可執行檔案,呼叫exec後會把exec中指定的可執行檔案載入到呼叫exec的程式的空間內,並把呼叫exec的程式的記憶體更新為exec中指定的可執行檔案的內容。

  區別:

  fork主要是Linux用來建立新的程式而設計的,exec()系列函式則是用來指定的程式替換當前程式的全部內容。因此exec()系列函式常常在前三個函式使用以後呼叫,來建立一個全新的程式執行環境。Linux用init程式啟動其餘程式的過程通常都是這樣的。

  fork是最簡單的呼叫,不須要任何引數,僅僅是在建立一個子程式併為其建立一個獨立於父程式的空間。

  我們用fork函式建立新程式後,經常會在新程式中呼叫exec函式去執行另外一個程式。當程式呼叫exec函式時,該程式被完全替換為新程式。因為呼叫exec函式並不建立新程式,所以前後程式的ID並沒有改變。

  父程式透過fork()的方式產生一個一模一樣的子程式,建立出來的子程式再以exec函式的方式來執行其實際要執行的程式,最終就成為一個可以執行某些特定功能的子程式。

  一個程式一旦呼叫exec類函式,它本身就死亡了,系統把程式碼段替換成新的程式的程式碼,廢棄原有的資料段和堆疊段,併為新程式分配新的資料段與堆疊段,唯一留下的,就是程式號,也就是說,對系統而言,還是同一個程式,不過已經是另一個程式了。即呼叫exec族函式後,其後面的程式都不會在執行了。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952527/viewspace-2930623/,如需轉載,請註明出處,否則將追究法律責任。

相關文章