Linux中fork和exec是什麼?有何區別?
在學習任何技術的時候,很多人經常會因為搞不懂專業術語而犯愁,甚至也經常因為兩個相似的專業術語摸不著頭腦,比如: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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux中打包和壓縮是什麼?兩者有何區別?Linux
- 什麼是中斷?什麼是異常?它們有何區別?
- 在Python中,val、exec和 compile 有什麼區別?PythonCompile
- 什麼是OA,與Office 有何區別
- linux和ubuntu區別是什麼?有什麼關係?LinuxUbuntu
- Linux SSH是什麼?對稱加密和非對稱加密有何區別?Linux加密
- Linux中什麼是打包?與歸檔有什麼區別?Linux
- Linux中Vi和Vim區別是什麼?Linux
- Linux中絕對路徑和相對路徑是什麼?二者有何區別?Linux
- 什麼是滲透測試和安全測試,有何區別?
- DNS欺騙和ARP欺騙是什麼?有何區別?DNS
- cookie是什麼?和session有什麼區別?CookieSession
- 在Linux中,Jail和Chroot有何區別?LinuxAI
- 在Linux中,umask 和 ulimit有什麼區別?LinuxMIT
- 什麼是內網滲透和外網滲透?有何區別?內網
- R語言的特點是什麼?和Python有何區別?R語言Python
- Java和Python是什麼?有什麼區別?JavaPython
- 在Linux中,Linux核心和Shell有何區別?Linux
- 什麼是Linux?和Unix之間有什麼較大的區別?Linux
- 海外IP代理中的IPv6和IPv4是什麼意思、有何區別?
- c++中&和&&有什麼區別C++
- 滲透測試和漏洞掃描是什麼?兩者有何區別?
- 什麼是報表工具?和 EXCEL 有什麼區別?Excel
- Java 介面和抽象類是什麼,有什麼區別Java抽象
- 什麼是 MicroPython?和CPython有什麼區別?Python
- 什麼是SCRM系統?和CRM有什麼區別?
- png是什麼格式 png和jpg有什麼區別
- xpgu是什麼 xgpu和xgp有什麼區別GPU
- Linux中虛擬網路卡是什麼?有何作用?Linux
- 海外HTTP代理中全域性代理和區域性代理是什麼?有什麼區別?HTTP
- MySQL、NoSQL分別是什麼?有什麼區別?MySql
- CRM和CRM系統是什麼意思,有什麼區別?
- 反向代理是什麼?和正向代理有什麼區別呢?
- 在Linux中,tomcat和nginx的區別是什麼?LinuxTomcatNginx
- Linux和Unix有什麼區別?兩者有什麼關係Linux
- 什麼是客戶體驗管理?CRM與CEM有何區別?
- 在 JavaScript 中,exec() 和 match() 區別JavaScript
- 雲原生和雲端計算是什麼?兩者有何區別?