fork vfork exit _exit

fork: 子進程擁有父進程的數據段、堆和棧的副本,父進程和子進程共享正文段。但現在很多實現卻並不是將父進程的數據段、堆棧段進行完全拷貝,而是採用寫時複製(copy-on-write),內核將其標記爲只讀,(典型的頁式虛存)只有父進程或子進程對這些區域進行修改時內核才真正將那一頁進行拷貝,從物理上分離開。
   vfork:由於在vfork後經常是跟着一個exec執行一個新的程序不會在用到原來的地址空間,所以vfork的子進程在調用exec或exit之前是在父進程的空間裏運行的,這樣對於頁式虛存效率很高。另外,vfork的子進程總是先與父進程執行,但是子進程不能依賴與父進程的執行否則產生死鎖。

exit(0):根據實現的不同而不同,一般是刷新I/O緩衝區,關閉所有I/O標準流 (APUE上如是說,但是我在linux下驗證的結果應該是沒有關閉),一般現在的I/O庫函數在關閉I/O流方面不自找麻煩了。

_exit(0):不刷新I/O緩衝區


標準I/O庫:
標準I/O庫是帶緩存的,如果標準輸出是連接到終端設備,則它是行緩衝的,否則是全緩衝的。行緩衝在接收到一個換行符才進行刷新,而全緩衝在緩衝區滿或者程序在執行exit退出後在執行緩衝區刷新


本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/sunnyclub/archive/2009/09/17/4563205.aspx

發佈了109 篇原創文章 · 獲贊 7 · 訪問量 40萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章