qileilove

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

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

           linux當(dāng)中可以使用fork函數(shù)創(chuàng)建一個新進(jìn)程
            #include <unistd.h>
            pid_t fork(void);
            返回值:子進(jìn)程中返回0,父進(jìn)程中返回子進(jìn)程ID,出錯返回-1
            在fork調(diào)用之后,子進(jìn)程獲得父進(jìn)程數(shù)據(jù)空間、堆和棧的副本,但是并不共享這些存儲空間部分。
            fork的一個特性是父進(jìn)程的所有打開文件描述符都被復(fù)制到子進(jìn)程中。父、子進(jìn)程的每個相同的打開描述符共享一個文件表項(xiàng)。
            這種共享文件的方式使父、子進(jìn)程對同一文件使用了一個文件偏移量。
            fork有兩種用法:
            (1)一個父進(jìn)程希望復(fù)制自己,使父、子進(jìn)程同時(shí)執(zhí)行不同的代碼段。例如,父進(jìn)程等待客戶端的服務(wù)請求,然后fork一個子進(jìn)程處理這個請求,自己則繼續(xù)等待下一個服務(wù)請求。
            (2)一個進(jìn)程要執(zhí)行一個不同的操作。fork一個子進(jìn)程之后立馬調(diào)用exec
            fork的特殊應(yīng)用:fork兩次可以避免僵死進(jìn)程,(僵死進(jìn)程是指一個已經(jīng)終止,但是其父進(jìn)程尚未對其進(jìn)行善后處理的進(jìn)程),父進(jìn)程先fork一個子進(jìn)程,子進(jìn)程繼續(xù)fork一個孫子進(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 閱讀(279) 評論(0)  編輯  收藏 所屬分類: linux

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

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 邵阳市| 安远县| 华宁县| 东方市| 临汾市| 册亨县| 应城市| 呼玛县| 宁夏| 乌兰县| 平昌县| 天祝| 肃宁县| 大安市| 商河县| 大埔县| 克拉玛依市| 丰都县| 乌恰县| 徐水县| 抚宁县| 金平| 昂仁县| 陇南市| 遵义县| 汕尾市| 土默特右旗| 晋江市| 海城市| 卓尼县| 额敏县| 垣曲县| 正宁县| 莱芜市| 松原市| 拜泉县| 康马县| 疏附县| 黔西| 明溪县| 三穗县|