首頁  >  文章  >  運維  >  linux中fork和exec有什麼差別

linux中fork和exec有什麼差別

WBOY
WBOY原創
2022-05-17 15:52:352524瀏覽

linux中fork和exec的區別:1、fork用於建立一個新的進程,稱為子進程,而exec則是用指定的程式取代目前進程的全部內容;2、exec的前後進程id沒有改變,而fork重新建立了子行程後id改變了。

linux中fork和exec有什麼差別

本教學操作環境:linux7.3系統、Dell G3電腦。

linux中fork和exec有什麼區別

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族函數後,其後面的程式都不會在執行了。

推薦學習:

Linux影片教學#

以上是linux中fork和exec有什麼差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn