第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問叉子與執(zhí)行器的區(qū)別

請問叉子與執(zhí)行器的區(qū)別

C
肥皂起泡泡 2019-08-02 12:02:18
叉子與執(zhí)行器的區(qū)別.之間有什么區(qū)別?fork和exec?
查看完整描述

3 回答

?
阿晨1998

TA貢獻2037條經(jīng)驗 獲得超6個贊

使用forkexec這體現(xiàn)了UNIX的精神,因為它提供了一種啟動新進程的非常簡單的方法。

這個fork調(diào)用基本復(fù)制當前進程,在差不多了千方百計。并不是所有的東西都被復(fù)制(例如,某些實現(xiàn)中的資源限制),但是想法是創(chuàng)建盡可能接近的副本。

新進程(子進程)獲得不同的進程ID(PID),并將舊進程(父進程)的PID作為父進程PID(PPID)。因為這兩個進程現(xiàn)在運行的代碼完全相同,它們可以根據(jù)fork-孩子得到0,父母得到孩子的PID。當然,假設(shè)fork調(diào)用有效-如果沒有,則不會創(chuàng)建任何子級,并且父程序?qū)@得一個錯誤代碼。

這個execCall是一種以新程序替換整個當前進程的方法。它將程序加載到當前進程空間,并從入口點運行它。

所以,forkexec經(jīng)常按順序使用,以使一個新程序作為當前進程的子進程運行。當您嘗試運行這樣的程序時,shell通常會這樣做。find-殼叉,然后子裝載find將程序輸入內(nèi)存,設(shè)置所有命令行參數(shù)、標準I/O等。

但它們不需要一起使用。對于一個程序來說,完全可以接受fork本身沒有exec例如,如果程序同時包含父代碼和子代碼(您需要小心操作,每個實現(xiàn)可能都有限制)。這在守護進程中被大量使用(而且現(xiàn)在仍然如此),這些守護進程只需在TCP端口上偵聽和fork當父程序返回到偵聽過程中處理特定請求的自身副本。

類似地,那些知道它們已經(jīng)完成并且只想運行另一個程序的程序不需要forkexec然后wait為了孩子。他們可以直接將子程序加載到他們的進程空間中。

一些UNIX實現(xiàn)有一個優(yōu)化的fork它使用的是他們所謂的抄寫。這是一個延遲復(fù)制進程空間的技巧。fork直到程序試圖在那個空間改變一些東西。這對于那些僅使用fork而不是exec因為他們不需要復(fù)制整個進程空間。

如果exec 調(diào)用如下fork(這是通常發(fā)生的情況),這會導(dǎo)致對進程空間的寫入,然后對子進程進行復(fù)制。

請注意,有一個完整的家庭exec電話(execlexecleexecve等等)但是exec在上下文中,意思是它們中的任何一個。

下圖說明了典型的fork/exec操作時,bashshell用于列出具有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

    |                      V

    |                  +--------+

    |                  | pid=22 |

    |                  | ppid=7 |

    |                  | ls     |

    V                  +--------+

+--------+                 |

| pid=7  |                 | exits

| ppid=4 | <---------------+

| bash   |

+--------+

    |

    | continues

 



查看完整回答
反對 回復(fù) 2019-08-03
?
慕森卡

TA貢獻1806條經(jīng)驗 獲得超8個贊

我認為一些概念馬克·羅奇金德的“高級Unix編程”的不同角色。fork()/exec(),尤其是對于那些習(xí)慣Windows的人來說CreateProcess()模型:

程序是保存在磁盤上常規(guī)文件中的指令和數(shù)據(jù)的集合。(來自1.1.2程序、進程和線程)

.

為了運行程序,首先要求內(nèi)核創(chuàng)建一個新的加工過程,這是一個程序執(zhí)行的環(huán)境。(也來自1.1.2程序、進程和線程)

.

如果不完全理解進程和程序之間的區(qū)別,就不可能理解EXEC或FRACK系統(tǒng)調(diào)用。如果這些術(shù)語對您來說是新的,您可能想要返回并檢查第1.1.2節(jié)。如果您現(xiàn)在準備繼續(xù),我們將在一句話中總結(jié)其區(qū)別:流程是一個由指令、用戶數(shù)據(jù)和系統(tǒng)數(shù)據(jù)段以及在運行時獲得的許多其他資源組成的執(zhí)行環(huán)境,而程序是包含用于初始化進程的指令和用戶數(shù)據(jù)段的指令和數(shù)據(jù)的文件。(來自5.3exec系統(tǒng)呼叫)

一旦您理解了程序和進程之間的區(qū)別,fork()exec()職能可概括為:

  • fork()

    創(chuàng)建當前進程的副本。
  • exec()

    將當前進程中的程序替換為另一個程序。

(這本質(zhì)上是簡化的“用于假人”版本的帕克斯·輝洛的答案要詳細得多)




查看完整回答
反對 回復(fù) 2019-08-03
  • 3 回答
  • 0 關(guān)注
  • 448 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號