[轉貼]有關fork

常言道:『飲水思源』,在 Open Source 的世界裡,我們常常需要別人的幫助,但是在您有所心得的時候請記得分享給大家,『幫助人是快樂的喔』。歡迎您在使用 debian 的過程中的任何心得分享給大家。

[轉貼]有關fork

文章moto » 週三 4月 30, 2003 3:20 pm

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
的用處.
歡迎你來到MOTO學園一起討論Debian相關問題。
在post問題前可先別忘記了以下的步驟:
1:翻一下/usr/share/doc/中是否已經有解答了?
2:閱讀一下無痛起步是否已經提到了?
3:找一下google予以解答?
4:善用學園中的"搜尋"功能,往往答案就在裡面窩。
頭像
moto
摩托學園站長
摩托學園站長
 
文章: 2808
註冊時間: 週二 9月 03, 2002 3:37 am
來自: 台北

回到 share

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客