(一)程式中fork與i/o函式之間的關係:
write是不帶緩衝 的,因為在fork之前調⽤用write,所以其資料只寫到標準輸出⼀一次。標準i/o是緩衝的,如果標準輸出到終端裝置,則它是⾏行緩衝,否則它是全緩衝。當以互⽅方式運⾏行該程式時,只得到printf輸出的⾏行⼀一次,因為標準輸出到終端緩衝區由換⾏行符沖洗。但將標準輸出重定向到⼀乙個⽂文時,由於緩衝區是全緩衝,遇到換⾏行符不輸出,當調⽤用fork時,其printf的資料仍然在緩衝區中,該資料將被複製到⼦子程序中,緩衝區也被複製到子程序中。於是⽗父⼦子程序的都有了帶改⾏行內容的標準i/o緩衝區,所以每個程序終⽌止時,會沖洗其緩衝區中的資料,得到第乙個printf輸出兩次。
(二)fork的特性
fork的乙個特性是父程序的所有開啟檔案描述符都被複製到子程序中去。
在fork之後處理的⽂檔案描述符有兩種常見的情況:
1. 父程序等待子程序完成。在這種情況下,父程序無需對其描述符做任何處理。當子
程序終止後,子程序對檔案偏移量的修改和已執行的更新。
2. 父子程序各自執行不同的程式段。這種情況下,在fork之後,父子程序各自關閉他們
不需要使用的檔案描述符,這樣就不會干擾對方使用檔案描述符。這種方法在網路服
務程序中經常使用。
(三)fork與vfork的區別
vfork用於建立乙個新程序,而該新程序的目的是exec乙個新程式。區別一:不將父程序的位址空間複製到子程序。區別二:vfork
保證子程序先執行,在它呼叫exec或(exit)之後父程序才可能被排程執行。
(四)父子程序關係示例
當程式中的i<3時
從簡單的例子入手分析當i=0時fork第一次產生乙個子程序,父子程序各列印一次。當i=1時,剛才產生的程序各自fork一次,列印兩次因此執行完共列印六次。i<3時列印次數為i<2時乘二加二為14次。
程序與執行緒的區別聯絡
自 對於執行緒,程序的概念一直都是比較模糊,最近整理了一下。總結起來就是,執行緒是程序的一部分,程序是程式的一部分。這個說法不準確,但是可以指出期間的差別 程序是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程序是系統進行資源分配和排程的乙個獨立單位.執行緒是程序的乙個實體,是cpu排程和...
程序與執行緒的區別與聯絡
程序 資源分配的基本單位,也是排程執行的基本單位 執行緒 程序中執行執行的最小單位,執行緒是作業系統可識別的最小執行和排程單位 兩者的關係 1.乙個執行緒只能屬於乙個程序,而乙個程序可以有多個執行緒 2.程序是資源分配的基本單位。同一程序中的所有執行緒共享該程序的資源包括 段 和常量 資料段 全域性...
程序與程式的區別與聯絡
程序的定義 程序是允許某個併發執行的程式在某個資料集合上的執行過程。程序是由正文段 使用者資料段及程序控制塊共同組成的執行環境。正文段存放被執行的機器指令。使用者資料段存放程序在執行時直接進行操作的使用者資料。程序控制塊存放程式的執行環境,作業系統通過這些資料描述和管理程序。程序的特徵 程序是作業系...