Linux中關於fork 複製程序

2021-08-09 23:15:54 字數 1300 閱讀 7872

fork()複製程序1、

fork()的基本概念

乙個現有程序可以用fork()函式通過系統呼叫建立乙個新程序,該函式定義如下:

#include pid_t fork(void);

// 返回:若成功則在子程序中返回0,在父程序中返回子程序pid,若出錯則返回-1

因此,可以通過返回值知道當前程序是父程序還是子程序。

2、fork呼叫的乙個奇妙之處就是它僅僅被呼叫一次,卻能夠返回兩次,它可能有三種不同的返回值:

1)在父程序中,fork返回新建立子程序的程序id;

2)在子程序中,fork返回0;

3)如果出現錯誤,fork返回乙個負值-1;

在fork函式執行完畢後,如果建立新程序成功,則出現兩個程序,乙個是子程序,乙個是父程序。在子程序中,fork函式返回0,在父程序中,fork返回新建立子程序的程序id。我們可以通過fork返回的值來判斷當前程序是子程序還是父程序。

3、例:

程式的執行結果:

4、關於fork()的面試題

#include #include #include #include #include int main()

exit(0);

}

問題:請問上述程式會輸出幾個a?

答:6個,因為加了"\n"之後不用考慮printf()函式的快取效果,所以輸出是6個。

那麼,我們把程式稍微做一些改動:

#include #include #include #include #include int main()

exit(0);

}

請問上述程式會輸出幾個a?

答:8個,因為沒有加"\n"就要考慮printf()函式的緩衝區,所以是8個。

補充:在父程序先開啟的檔案經過fork複製,在子程序中仍然可以訪問,並且和父程序共享檔案偏移量。

關於fork函式中的記憶體複製和共享

原來剛剛開始做linux下面的多程序程式設計的時候,對於下面這段 感到很奇怪,1 include2 include3 include 4 include5 include6 include7 define len 2 8void err exit char fmt,9int main int arg...

Linux下的fork複製程序

1.複製程序的概念 fork建立乙個程序時,子程序只是完全複製父程序的資源,複製出來的子程序有自己的task struct結構和pid,同時複製父程序其它資源 使用者空間 檔案描述符集 2.複製程序的實現方式 當我們需要複製乙個程序時,我們就去呼叫fork 這這個函式,fork 這個函式就會去陷入核...

Linux程序管理 fork 和寫時複製

寫時複製技術最初產生於unix系統,用於實現一種傻瓜式的程序建立 當發出fork 系統呼叫時,核心原樣複製父程序的整個位址空間並把複製的那乙份分配給子程序。這種行為是非常耗時的,因為它需要 為子程序的頁表分配頁面 為子程序的頁分配頁面 初始化子程序的頁表 把父程序的頁複製到子程序相應的頁中 建立乙個...