//原題是求下列程式會列印多少個-號:
#include #include #include #include int main()
return 0;
}
執行結果:
admindeimac-2:~ yidan.huang$ ./fork
- 0532 878 244920374
- 0532 878 879
- 1532 878 879
- 1532 878 880 //由於不同的作業系統的排程策略,此時先父程序執行完,父程序建立了兩個子程序879、880
- 0878 879 0 //僅繼承並執行fork()後的**,繼續列印i=0
- 1878 879 0
- 11 879 881 //這是父程序建立的第乙個子程序879執行完,子程序中只fork()一次(在i=1時),建立了子子程序881
- 11 880 0 // 由於父程序執行完退出了,子程序880變成孤兒程序由pid=1的init領養
- 11 881 0 //由子程序879執行完退出了,子子程序881變孤兒程序由pid=1領養
總共輸出9個-號
父程序與子程序管道
int main else return 0 先在父程序中建立管道,然後建立子程序,子程序複製了父程序管道檔案的檔案描述符,所以父程序和子程序各具有2個管道描述符,當在子程序中關閉讀端,這時關閉的是子程序中管道檔案的讀端,而父程序的讀端沒有關閉,這時子程序往寫段寫資料的時候,因管道讀端未完全關閉,所...
fork和vfork與程序和子程序
fork和vfork同樣可以建立子程序,但fork會把父程序的資源做拷貝,而vfork會直接在父程序的位址空間中執行。但是fork也有共享的內容,比如檔案描述符的檔案表,父子程序的沒個相同描述符共享同乙個檔案表,因此,父 子程序對同一檔案使用相同的檔案位移向量。乙個程序可以有多個子程序,但只能有乙個...
fork 子程序不繼承父程序開啟的檔案描述符
昨天面試被問到了這個問題,沒有回答上來,網上找了一下答案。解決方法是使用clone系統呼叫使用引數在複製時將父程序資源有選擇地複製給子程序。下面介紹forkvforkclone三者的區別 vfork系統呼叫不同於fork,用vfork建立的子程序與父程序共享位址空間,也就是說子程序完全執行在父程序的...