欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

          linux中fork和exec有什么區(qū)別

          linux中fork和exec的區(qū)別:1、fork用于創(chuàng)建一個新的進程,稱為子進程,而exec則是用指定的程序替換當前進程的全部內(nèi)容;2、exec的前后進程id沒有改變,而fork重新創(chuàng)建了子進程后id改變了。

          linux中fork和exec有什么區(qū)別

          本教程操作環(huán)境:linux7.3系統(tǒng)、Dell G3電腦。

          linux中fork和exec有什么區(qū)別

          fork和exec都是和進程相關(guān)的調(diào)用.

          fork

          調(diào)用fork可以創(chuàng)建一個新的進程稱為子進程, 調(diào)用fork函數(shù)的進程稱為父進程, 子進程的所有內(nèi)容都和父進程相同, 除了pcd(進程控制模塊), 如果這兩個進程都沒有對內(nèi)存做寫操作的話, 那么兩個進程共享調(diào)用fork函數(shù)的進程的內(nèi)存頁, 這樣表面上看fork創(chuàng)建進程比exec創(chuàng)建進程快. 但只要兩個進程其中一個對內(nèi)存做了修改, 那么在修改之前, 就會把內(nèi)存頁復(fù)制一份給子進程用.

          exec

          調(diào)用exec創(chuàng)建進程, 實際上不是創(chuàng)建進程, 更準確的說是加載可執(zhí)行文件, 調(diào)用exec后會把exec中指定的可執(zhí)行文件加載到調(diào)用exec的進程的空間內(nèi), 并把調(diào)用exec的進程的內(nèi)存更新為exec中指定的可執(zhí)行文件的內(nèi)容.

          區(qū)別

          fork主要是Linux用來建立新的進程(線程)而設(shè)計的,exec()系列函數(shù)則是用來用指定的程序替換當前進程的全部內(nèi)容。因此exec()系列函數(shù)常常在前三個函數(shù)使用以后調(diào)用,來建立一個全新的程序運行環(huán)境。Linux用init進程啟動其余進程的過程通常都是這樣的

          fork是最簡單的調(diào)用,不須要任何參數(shù),僅僅是在建立一個子進程并為其建立一個獨立于父進程的空間。

          我們用fork函數(shù)創(chuàng)建新進程后,經(jīng)常會在新進程中調(diào)用exec函數(shù)去執(zhí)行另外一個程序(比如在我們寫程序時需要使用我們之前的寫過的某個程序的功能,通過該方式直接去調(diào)用一個可執(zhí)行程序可以大大的簡化我們的程序)。當進程調(diào)用exec函數(shù)時,該進程被完全替換為新程序。因為調(diào)用exec函數(shù)并不創(chuàng)建新進程,所以前后進程的ID并沒有改變。

          父進程通過fork()的方式產(chǎn)生一個一模一樣的子進程,創(chuàng)建出來的子進程再以exec函數(shù)的方式來執(zhí)行其實際要執(zhí)行的進程,最終就成為一個可以執(zhí)行某些特定功能的子進程。

          一個進程一旦調(diào)用exec類函數(shù),它本身就“死亡”了,系統(tǒng)把代碼段替換成新的程序的代碼,廢棄原有的數(shù)據(jù)段和堆棧段,并為新程序分配新的數(shù)據(jù)段與堆棧段,唯一留下的,就是進程號,也就是說,對系統(tǒng)而言,還是同一個進程,不過已經(jīng)是另一個程序了。即調(diào)用exec族函數(shù)后,其后面的程序都不會在執(zhí)行了。

          推薦學習:Linux視頻教程

          贊(0)
          分享到: 更多 (0)
          網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號