fork 子程序與父程序執行列印多少個 號問題

2021-08-08 13:54:20 字數 594 閱讀 2257

//原題是求下列程式會列印多少個-號:

#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建立的子程序與父程序共享位址空間,也就是說子程序完全執行在父程序的...