qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

          Linux學(xué)習(xí)—fork用法

           linux當(dāng)中可以使用fork函數(shù)創(chuàng)建一個(gè)新進(jìn)程
            #include <unistd.h>
            pid_t fork(void);
            返回值:子進(jìn)程中返回0,父進(jìn)程中返回子進(jìn)程ID,出錯(cuò)返回-1
            在fork調(diào)用之后,子進(jìn)程獲得父進(jìn)程數(shù)據(jù)空間、堆和棧的副本,但是并不共享這些存儲(chǔ)空間部分。
            fork的一個(gè)特性是父進(jìn)程的所有打開文件描述符都被復(fù)制到子進(jìn)程中。父、子進(jìn)程的每個(gè)相同的打開描述符共享一個(gè)文件表項(xiàng)。
            這種共享文件的方式使父、子進(jìn)程對(duì)同一文件使用了一個(gè)文件偏移量。
            fork有兩種用法:
            (1)一個(gè)父進(jìn)程希望復(fù)制自己,使父、子進(jìn)程同時(shí)執(zhí)行不同的代碼段。例如,父進(jìn)程等待客戶端的服務(wù)請(qǐng)求,然后fork一個(gè)子進(jìn)程處理這個(gè)請(qǐng)求,自己則繼續(xù)等待下一個(gè)服務(wù)請(qǐng)求。
            (2)一個(gè)進(jìn)程要執(zhí)行一個(gè)不同的操作。fork一個(gè)子進(jìn)程之后立馬調(diào)用exec
            fork的特殊應(yīng)用:fork兩次可以避免僵死進(jìn)程,(僵死進(jìn)程是指一個(gè)已經(jīng)終止,但是其父進(jìn)程尚未對(duì)其進(jìn)行善后處理的進(jìn)程),父進(jìn)程先fork一個(gè)子進(jìn)程,子進(jìn)程繼續(xù)fork一個(gè)孫子進(jìn)程,然后就直接退出。這樣,父進(jìn)程就可以很快的wait到子進(jìn)程,釋放其資源,不需要阻塞,繼續(xù)自己的操作;而孫子進(jìn)程交由了init進(jìn)程托管,執(zhí)行自己的操作而不用擔(dān)心了。
            ps:write函數(shù)不帶緩沖,標(biāo)準(zhǔn)I/O庫是帶緩沖的,如果標(biāo)準(zhǔn)輸出練到終端設(shè)備,則它是行緩沖的,否則它是全緩沖的

          posted on 2014-03-27 17:07 順其自然EVO 閱讀(277) 評(píng)論(0)  編輯  收藏 所屬分類: linux

          <2014年3月>
          2324252627281
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 翁牛特旗| 合作市| 大宁县| 田林县| 睢宁县| 横山县| 武汉市| 太和县| 长兴县| 华池县| 县级市| 马鞍山市| 阿拉善盟| 广饶县| 大荔县| 土默特左旗| 扎囊县| 南涧| 佛教| 萝北县| 苏尼特左旗| 桑植县| 永福县| 文登市| 宝丰县| 桐城市| 沭阳县| 广宗县| 绵竹市| 新郑市| 莱西市| 朝阳县| 邢台市| 石棉县| 古交市| 莫力| 巩义市| 镇坪县| 宝应县| 临夏县| 扎鲁特旗|