2009-08-28 169 views
3

fork用於創建從其調用的進程的副本。 這通常是在調用exec系列函數之後進行的。 除此之外還有其他叉子的用法嗎? 我能想到一個。用管道功能做IPC。fork系統調用的應用程序

回答

0

如果您有某種服務器偵聽傳入連接,則可以派生子進程來處理傳入請求(這不一定涉及exec或管道)。

5

當然可以。開始一個過程,做一些數據初始化,然後產生多個工作者是很常見的。它們在地址空間中都有相同的數據,並且是寫入時複製。

另一個常見的事情是讓主進程監聽每個連接的TCP套接字和fork()。這樣,可以在現有連接並行處理時立即處理新連接。

我想你忘記了在fork()之後,兩個進程都可以訪問fork()之前的進程中存在的所有數據。

+0

Yes Ofcourse。謝謝。 – Ankur 2009-08-28 06:58:06

+1

還有「分叉,讓一個實例繼續工作,第二個檢查點計算狀態穩定存儲」。 – Vatine 2011-04-03 08:39:11

+0

我想這不能用多線程來實現..是因爲爲了分配新的資源(TCP套接字)我們需要新的進程和線程本身不能做到這一點,因爲它們共享公共資源? – 2013-06-26 16:21:05

4

fork的另一個用途是從父進程中分離(回退到init,進程1)。如果有一些進程,比如說帶有1111的bash,啓動獲取pid 2222的myserver,它將有1111作爲父進程。假設2222分叉和孩子獲得pid 3333.如果現在進程2222退出,則3333將鬆開其父節點,而是將init作爲其新父節點。

啓動時,deamons有時會使用此策略,以便與啓動它的進程沒有父級關係。另見this answer。叉的

0

我已經寫了一個小的外殼,並且它是完整的叉的(是這是EXEC ..),特別是對於管道元件。 wikipedia page on pipe