Linux學習—fork用法
linux當中可以使用fork函數(shù)創(chuàng)建一個新進程
#include <unistd.h>
pid_t fork(void);
返回值:子進程中返回0,父進程中返回子進程ID,出錯返回-1
在fork調(diào)用之后,子進程獲得父進程數(shù)據(jù)空間、堆和棧的副本,但是并不共享這些存儲空間部分。
fork的一個特性是父進程的所有打開文件描述符都被復(fù)制到子進程中。父、子進程的每個相同的打開描述符共享一個文件表項。
這種共享文件的方式使父、子進程對同一文件使用了一個文件偏移量。
fork有兩種用法:
(1)一個父進程希望復(fù)制自己,使父、子進程同時執(zhí)行不同的代碼段。例如,父進程等待客戶端的服務(wù)請求,然后fork一個子進程處理這個請求,自己則繼續(xù)等待下一個服務(wù)請求。
(2)一個進程要執(zhí)行一個不同的操作。fork一個子進程之后立馬調(diào)用exec
fork的特殊應(yīng)用:fork兩次可以避免僵死進程,(僵死進程是指一個已經(jīng)終止,但是其父進程尚未對其進行善后處理的進程),父進程先fork一個子進程,子進程繼續(xù)fork一個孫子進程,然后就直接退出。這樣,父進程就可以很快的wait到子進程,釋放其資源,不需要阻塞,繼續(xù)自己的操作;而孫子進程交由了init進程托管,執(zhí)行自己的操作而不用擔心了。
ps:write函數(shù)不帶緩沖,標準I/O庫是帶緩沖的,如果標準輸出練到終端設(shè)備,則它是行緩沖的,否則它是全緩沖的
posted on 2014-03-27 17:07 順其自然EVO 閱讀(277) 評論(0) 編輯 收藏 所屬分類: linux