日本a√视频在线,久久青青亚洲国产,亚洲一区欧美二区,免费g片在线观看网站

        <style id="k3y6c"><u id="k3y6c"></u></style>
        <s id="k3y6c"></s>
        <mark id="k3y6c"></mark>
          
          

          <mark id="k3y6c"></mark>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Linux中的fork與exec系列函數(shù)分析

          Linux中的fork與exec系列函數(shù)分析

          作者:嵌入式經(jīng)驗(yàn)分享 時(shí)間:2025-08-06 來源:今日頭條 收藏

          fork 和 exec 的使用體現(xiàn)了 UNIX 的精髓,它提供了一種非常簡單的方式來啟動(dòng)新的任務(wù)。注意這里“任務(wù)”一詞的使用,我刻意避免使用“進(jìn)程”或“程序”這兩個(gè)術(shù)語:

          進(jìn)程是“執(zhí)行引擎”,是操作系統(tǒng)中能夠運(yùn)行程序的實(shí)體;

          程序是用于執(zhí)行相同任務(wù)的特定代碼片段。

          你可以在不同的進(jìn)程中運(yùn)行同一個(gè)程序(例如交互式 shell)。

          fork()的功能

          考慮到這一點(diǎn),fork 調(diào)用基本上會(huì)復(fù)制當(dāng)前進(jìn)程,幾乎在各個(gè)方面都完全相同。并非所有內(nèi)容都會(huì)被復(fù)制(例如,某些實(shí)現(xiàn)中的資源限制),但其目的是創(chuàng)建盡可能接近的副本。

          fork將創(chuàng)建新進(jìn)程(也叫子進(jìn)程),子進(jìn)程會(huì)獲得不同的進(jìn)程 ID (PID),并將創(chuàng)建它的進(jìn)程(父進(jìn)程)的 PID 作為其父進(jìn)程 PID (PPID)。雖然兩個(gè)進(jìn)程運(yùn)行的是同一個(gè)程序,但是它們可以通過 fork 的返回值來區(qū)分——子進(jìn)程返回 0,而父進(jìn)程返回子進(jìn)程的 PID。當(dāng)然,這一切都建立在 fork 調(diào)用成功的前提上——如果失敗,則不會(huì)創(chuàng)建子進(jìn)程,父進(jìn)程會(huì)返回錯(cuò)誤碼。

          exec()的功能

          exec 調(diào)用本質(zhì)上是用一個(gè)新程序替換進(jìn)程中整個(gè)當(dāng)前程序的方法。它會(huì)將新程序加載到當(dāng)前進(jìn)程空間,并從入口點(diǎn)運(yùn)行。

          因此,fork 和 exec 通常按順序使用,以使新程序作為當(dāng)前進(jìn)程的子進(jìn)程運(yùn)行。每當(dāng)你嘗試運(yùn)行類似 find 的程序時(shí),Shell 通常會(huì)執(zhí)行此操作——Shell 會(huì) fork,然后子進(jìn)程將 find 程序加載到內(nèi)存中,設(shè)置所有命令行參數(shù)、標(biāo)準(zhǔn) I/O 等等。

          一些 UNIX 實(shí)現(xiàn)對 fork 進(jìn)行了優(yōu)化,使用了所謂的“寫時(shí)復(fù)制”機(jī)制。這是一種技巧,可以延遲 fork 過程中對進(jìn)程空間的復(fù)制,直到程序嘗試更改該空間中的某些內(nèi)容。這對于只使用 fork 而不使用 exec 的程序非常有用,因?yàn)樗鼈儾槐貜?fù)制整個(gè)進(jìn)程空間。

          exec 調(diào)用有很多種(execl、execle、execve 等等),但此處上下文中的 exec 指的是其中任何一個(gè)。

          實(shí)例演示

          下圖演示了典型的 fork/exec 操作,其中使用 bash shell 的 ls 命令列出目錄:

          +--------+| pid=7  || ppid=4 || bash   |+--------+    |
             | calls fork
             V
          +--------+             +--------+| pid=7  |    forks    | pid=22 || ppid=4 | ----------> | ppid=7 || bash   |             | bash   |+--------+             +--------+    |                      |
             | waits for pid 22     | calls exec to run ls    |   to finish          V
             |                  +--------+    |                  | pid=22 |
             |                  | ppid=7 |
             |                  | ls     |
             V                  +--------+
          +--------+                 || pid=7  |                 | exits
          | ppid=4 | <---------------+
          | bash   |
          +--------+
             |
             | continues
             V



          關(guān)鍵詞: Linux

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉