最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入分析父子線程、進(jìn)程終止順序不同產(chǎn)生的結(jié)果

 更新時(shí)間:2013年05月26日 16:21:30   作者:  
本篇文章是對(duì)父子線程、進(jìn)程終止順序不同產(chǎn)生的結(jié)果進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下

Linux下編程,線程、進(jìn)程退出順序問題紛紛擾擾,如果父進(jìn)程/線程先于子進(jìn)程/線程終止,系統(tǒng)會(huì)做什么處理呢?反之,如果子進(jìn)程/線程先于父進(jìn)程/線程終止,系統(tǒng)又會(huì)做什么處理呢?下面是我個(gè)人平時(shí)在筆記上做的一些象征性的總結(jié),如果有疑問之處,大可提出,我一直認(rèn)為懷疑是人類進(jìn)步的根本所在。

一、線程
Linux線程創(chuàng)建函數(shù)為pthread_create(),默認(rèn)規(guī)則是誰創(chuàng)建子線程,誰就要負(fù)責(zé)子線程的資源回收,當(dāng)父線程退出后,子線程也隨著退出。所以,一般情況下,父線程退出時(shí)都要確保子線程已經(jīng)退出,所以會(huì)使用pthread_join()函數(shù)阻塞等待子線程的退出信號(hào)/標(biāo)識(shí)。
pthread_detach(threadid)函數(shù)的功能是使線程ID為threadid的線程處于分離狀態(tài)(可以為非父子關(guān)系),一旦線程處于分離狀態(tài),該線程終止時(shí)底層資源立即被回收;否則終止子線程的狀態(tài)會(huì)一直保存占用系統(tǒng)的資源直到主線程調(diào)用pthread_join(threadid,NULL)獲取線程的退出狀態(tài)。被創(chuàng)建的子線程也可以自己分離自己,子線程調(diào)用pthread_detach(pthread_self())就是分離自己,因?yàn)閜thread_self()這個(gè)函數(shù)返回的就是自己本身的線程ID。
1)父線程先于子線程終止
父線程先于子線程,則子線程為異常退出 ,那肯定沒有使用阻塞非分離函數(shù)pthread_join,分2種情況:
a)子線程已與父線程分離,如調(diào)用線程分離函數(shù)pthread_detach,則資源被自動(dòng)回收釋放。
b)子線程未與父線程分離,則資源無法釋放,造成了資源浪費(fèi)和系統(tǒng)臃腫(這種情況,我看有些資料上說系統(tǒng)也能自動(dòng)釋放子線程的資源,如關(guān)閉描述符,釋放內(nèi)存空間等等,但個(gè)人做過一些測試,比如在子線程中分配很多空間等,進(jìn)程退出后,top查看內(nèi)存狀態(tài)時(shí)還存在)。
2)子線程先于父線程終止
也分2種情況:
a)正常情況:子線程調(diào)用了線程分離函數(shù)ptread_detach(),或父線程調(diào)用了等待線程結(jié)束函數(shù)pthread_join()。
 b)異常情況:如果上面二者都為調(diào)用,則為子線程分配的資源無法得到釋放。

二、進(jìn)程
一個(gè)現(xiàn)有進(jìn)程可以調(diào)用fork函數(shù)創(chuàng)建一個(gè)新進(jìn)程。由fork創(chuàng)建的新進(jìn)程被稱為子進(jìn)程(child process)。fork函數(shù)被調(diào)用一次但返回兩次。兩次返回的唯一區(qū)別是子進(jìn)程中返回0值而父進(jìn)程中返回子進(jìn)程ID。
1)父進(jìn)程先于子進(jìn)程終止
當(dāng)父進(jìn)程先退出時(shí),系統(tǒng)會(huì)讓init進(jìn)程接管子進(jìn)程,該子線程成為了孤兒進(jìn)程。
2)子進(jìn)程先于父進(jìn)程終止
分為2種情況:
a)正常情況:父進(jìn)程調(diào)用了wait函數(shù) (非父子進(jìn)程則用waitpid函數(shù)),此時(shí)父進(jìn)程會(huì)等待子進(jìn)程結(jié)束。
 b)父進(jìn)程又沒有調(diào)用wait函數(shù) (非父子進(jìn)程則未調(diào)用waitpid函數(shù)),此種情況子進(jìn)程進(jìn)入僵死狀態(tài)即僵尸進(jìn)程,并且會(huì)一直保持下去直到系統(tǒng)重啟。子進(jìn)程處于僵死狀態(tài)時(shí),內(nèi)核只保存進(jìn)程的一些必要信息以備父進(jìn)程所需。此時(shí)子進(jìn)程始終占有著資源,同時(shí)也減少了系統(tǒng)可以創(chuàng)建的最大進(jìn)程數(shù)。
僵死狀態(tài):一個(gè)已經(jīng)終止、但是其父進(jìn)程尚未對(duì)其進(jìn)行善后處理(獲取終止子進(jìn)程的有關(guān)信息,釋放它仍占有的資源)的進(jìn)程被稱為僵死進(jìn)程(zombie)。ps命令將僵死進(jìn)程的狀態(tài)打印為Z 。

 

相關(guān)文章

  • VC++ loadlibrary()加載三方dll失敗, 返回錯(cuò)誤碼:126的解決方法

    VC++ loadlibrary()加載三方dll失敗, 返回錯(cuò)誤碼:126的解決方法

    今天在編寫VC++ loadlibrary()加載三方dll是總是失敗,并且返回錯(cuò)誤碼:126,這里就為大家分享一下具體的解決方法
    2021-03-03
  • C++回調(diào)函數(shù)實(shí)現(xiàn)計(jì)算器和qsort

    C++回調(diào)函數(shù)實(shí)現(xiàn)計(jì)算器和qsort

    這篇文章主要介紹了C++回調(diào)函數(shù)實(shí)現(xiàn)計(jì)算器和qsort,回調(diào)函數(shù)就是一個(gè)通過函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個(gè)函數(shù),當(dāng)這個(gè)指針被用來調(diào)用其所指向的函數(shù)時(shí),我們就說這是回調(diào)函數(shù)
    2022-08-08
  • C++開發(fā)之CRC校驗(yàn)實(shí)例詳解

    C++開發(fā)之CRC校驗(yàn)實(shí)例詳解

    這篇文章主要介紹了C++開發(fā)之CRC校驗(yàn)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • 一文詳解C語言中文件相關(guān)函數(shù)的使用

    一文詳解C語言中文件相關(guān)函數(shù)的使用

    這篇文章主要為大家詳細(xì)介紹了C語言中文件相關(guān)函數(shù)的使用,可以實(shí)現(xiàn)文件的讀寫、打開和關(guān)閉。文中通過示例進(jìn)行了詳細(xì)介紹,需要的可以參考一下
    2022-07-07
  • C++中實(shí)現(xiàn)把表的數(shù)據(jù)導(dǎo)出到EXCEL并打印實(shí)例代碼

    C++中實(shí)現(xiàn)把表的數(shù)據(jù)導(dǎo)出到EXCEL并打印實(shí)例代碼

    這篇文章主要介紹了實(shí)現(xiàn)把表的數(shù)據(jù)導(dǎo)出到EXCEL并打印實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • C語言實(shí)現(xiàn)的猜拳游戲代碼分享

    C語言實(shí)現(xiàn)的猜拳游戲代碼分享

    本文給大家分享的是一個(gè)C語言實(shí)現(xiàn)的猜拳小游戲,由于本程序簡單易操作,交互性好,對(duì)用戶沒什么特別要求。這里推薦給大家
    2016-02-02
  • C語言?struct結(jié)構(gòu)體超詳細(xì)講解

    C語言?struct結(jié)構(gòu)體超詳細(xì)講解

    C語言中,結(jié)構(gòu)體類型屬于一種構(gòu)造類型(其他的構(gòu)造類型還有:數(shù)組類型,聯(lián)合類型),下面這篇文章主要給大家介紹了關(guān)于C語言結(jié)構(gòu)體(struct)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • C語言多組輸入使用方法

    C語言多組輸入使用方法

    這篇文章主要給大家介紹了關(guān)于C語言多組輸入使用的相關(guān)資料,在 C語言中可以使用循環(huán)語句來實(shí)現(xiàn)多組輸入,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • C++?shared_ptr智能指針reset()使用示例詳解

    C++?shared_ptr智能指針reset()使用示例詳解

    這篇文章主要為大家介紹了C++?shared_ptr智能指針reset()使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • C++通過boost.date_time進(jìn)行時(shí)間運(yùn)算

    C++通過boost.date_time進(jìn)行時(shí)間運(yùn)算

    這篇文章介紹了C++通過boost.date_time進(jìn)行時(shí)間運(yùn)算的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06

最新評(píng)論

来宾市| 仁寿县| 伊春市| 海口市| 荥经县| 桓仁| 广平县| 泰兴市| 吉隆县| 会东县| 琼结县| 阳朔县| 伊川县| 济南市| 双鸭山市| 鱼台县| 南岸区| 二连浩特市| 泽普县| 舞阳县| 教育| 驻马店市| 峡江县| 沛县| 水富县| 南漳县| 金门县| 河东区| 巨野县| 德保县| 兰西县| 武夷山市| 台湾省| 达拉特旗| 安义县| 东方市| 大姚县| 巴林左旗| 开平市| 田东县| 乃东县|