1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Linux 進程總結(jié)

        共 1763字,需瀏覽 4分鐘

         ·

        2020-04-15 23:25


        點擊上方“杰哥的IT之旅”,選擇“”公眾號重磅干貨,第一時間送達

        作 者:For_zwb
        鏈 接:

        https://blog.csdn.net/weixin_42250655/article/details/81567643

        進程

        進程,是計算機中的程序關(guān)于某數(shù)據(jù)集合上的一次運行活動,是系統(tǒng)進行資源分配和調(diào)度的基本單位,是操作系統(tǒng)結(jié)構(gòu)的基礎。它的執(zhí)行需要系統(tǒng)分配資源創(chuàng)建實體之后,才能進行。舉個例子:我們所寫的程序,在運行的時候它也是一個進程。

        進程和程序的區(qū)別:

        程序相當于是一個文件,是有序代碼的集合,是靜態(tài)的存儲在硬盤中。而進程是運行中的程序,系統(tǒng)會為變量分配相應的內(nèi)存和初始化它們的值,還有一些資源如:堆、棧等當程序運行完進程也就結(jié)束了,但程序還是保存在硬盤中沒有消失。

        進程的特性

        • 并發(fā)性:可以與其它進程在宏觀上同時向前推進。

        • 動態(tài)性:進程是執(zhí)行中的程序,動態(tài)產(chǎn)生、動態(tài)消亡、動態(tài)變化。

        • 獨立性:進程是系統(tǒng)資源分配的基本單位。

        • 交往性:與其它進程可以進行交互。

        • 異步性:不統(tǒng)一推進。

        • 結(jié)構(gòu)性:每個進程有一個控制塊PCB。

        • 并行性:只有在多CPU多處理器的計算機上,進程才能并行執(zhí)行。

        一個進程中如何創(chuàng)建多個進程

        創(chuàng)建進程有兩種方式:一種是操作系統(tǒng)創(chuàng)建,另一種是父進程創(chuàng)建。父進程創(chuàng)建的進程(通常稱為子進程),它們和父進程存在隸屬關(guān)系。子進程又可以創(chuàng)建進程,這樣形成一個進程家族。子進程可以繼承其父進程幾乎所有的資源。

        8cc9e0daf0aa112bdc8a912fbcd83b7d.webp

        孤兒進程

        孤兒字面意思就是沒有父母的孩子,那孤兒進程的意思就是沒有父進程的進程。這種情況是怎么發(fā)生的呢?就是父進程先于子進程結(jié)束,這時子進程被init進程收養(yǎng),init的進程號為1。

        僵尸進程

        當一個子進程終止時,如果它的父進程還在運行,內(nèi)核會為這個終止的子進程保留一定量的信息。父進程可以根據(jù)這些信息知道子進程的情況。直到父進程對其進行了善后處理,子進程才會完全終止。在這期間,父進程沒有回收子進程并釋放子進程占用的資源,這個子進程會成為僵尸進程,它仍然占用一定資源。

        進程終止

        • 從main函數(shù)返回 return()。

        • 調(diào)用 exit()。

        • 調(diào)用 _exit()或 _Exit()。

        • 最后一個線程從其啟動例程返回。

        • 最后一個線程調(diào)用 pthread_exit()。

        • 調(diào)用 abort()它產(chǎn)生 SIGABRT 信號。

        • 收到一個信號并終止。

        • 最后一個線程對取消請求作出相應。

        進程組

        每個進程都屬于某個進程組。進程組是一個或多個進程的集合。通常它們與同一作業(yè)相關(guān)聯(lián),可以接收來自同一終端的各種信號。每個進程組有一個唯一的進程組ID。每個進程組都有一個組長進程,進程ID等于進程組ID的進程就是組長進程。

        f6cb357f8940aa200f5b384d22946cfd.webp

        會話

        會話(session)是一個或多個進程組的集合。

        競態(tài)條件

        當多個進程都企圖對共享數(shù)據(jù)進行某種處理時,而最后的結(jié)果又取決于進程運行的順序時,我們認為發(fā)生了競態(tài)條件(race condition)。如果fork之后的某種邏輯顯式或隱式地依賴于在fork之后是父進程先運行還是子進程先運行,那么fork函數(shù)就會是競爭條件活躍的滋生地。通常,我們都是不可以預估子進程和父進程哪個先運行。因為進程的運行順序完全取決于內(nèi)核的調(diào)度算法和系統(tǒng)的負載。

        我們可以調(diào)用wait或者waitpid函數(shù)來讓父進程等待子進程運行完之后在運行,這樣父進程就會被阻塞住,直到子進程運行完畢之后才能運行,其實這樣做的效率就比較低,我們fork就是希望多進程并發(fā)的執(zhí)行,如果采用此方法,則fork也就失去了很大的意義。

        為了避免競爭條件和不采用wait或waitpid方法,我們可以在多進程之間采用發(fā)送和接收信號的處理方法來避免競態(tài)條件?;蛘吒鞣N進程間的通信方式(IPC)也可以使用。


        本公眾號全部博文已整理成一個目錄,請在公眾號后臺回復「m」獲??!推薦閱讀:

        Redis 使用的 10 個小技巧!
        支付寶的架構(gòu)到底有多牛逼?
        一文看懂:網(wǎng)址,URL,域名,IP地址,DNS,域名解析
        如何解決代碼中 if…else 過多的問題?
        面試資源、公共API、多樣化學習路徑,這10個GitHub庫開發(fā)者必看!
        Windows支持直接訪問Linux子系統(tǒng)文件:你的下一臺Linux何必是Linux

        關(guān)注微信公眾號『杰哥的IT之旅』,后臺回復“1024”查看更多內(nèi)容,回復“微信”添加我微信。


        好文和朋友一起看~
        瀏覽 50
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            淫秽视频在线观看 | 91看片淫黄大片91 | 榴莲香蕉苹果哈密瓜水蜜桃 | 红桃视频 在线 一区二区 | 欧美日韩三级片 | 37pao强力打造高清在线播放网站 | 成人视频网站18 | 国产精品视频永久免费观看成人 | 国产在线精品视频 | 国产黄片免费 |