From: peiny.bbs@bbs.nhctc.edu.tw (薇)
fork前後有什麼差別呢?
From: leolarrel@kkcity.com.tw (我是可愛的C++)
ex.
pid = fork();
if (pid != 0) {//這是父程序} else {//這是子程序}
fork會產生一個行程, 首先知道, UNIX裡, 行程代表著一個可以執行空間, 狹
義的說, 行程就是一個正在執行的程式.
你可以用ps看到系統正有幾個行程再跑.
當fork呼叫的時候, fork會 "復制" 一個一模依樣的的行程, 所以現在系統上
就有兩個行程了, 原先呼叫fork的行程叫做父行程被fork制作出來的叫做子行程,
你可以用ps afx來查看每個行程的父子關系.
接下來, 很不容易理解的, 程式如何去分辨父行程跟子行程呢? 通常要一個子
行程的目的是希望特殊的工作要有專屬行程來處理如果我們的程式不能分辨, 那便
是垃圾一堆.
再仔細看上面的範例, 程式會檢查fork傳回直, 也就是pid來辨別父 , 子行程
. 原因是: 當fork動作完成的時候, 父, 子兩個行程都已經就緒, 所以呢, 父, 子
兩個程序接下來, "都是" 從fork之後繼續執行, 而父行程的fork傳回直為子行程
的行程ID, 而子行程的fork傳回值為0.
至於fork經常跟exec函式搭配, 你必須研讀一下exec, 這樣比較容易體會fork
的用處.