2017-02-20 55 views
1

首先,這是一個家庭作業問題,所以我不想找人給我答案。我只是希望指出正確的方向。我怎樣才能正好分叉6個過程

我被授予了使用c語言和命令fork()創建正好6個進程的任務,然後讓所有6個睡眠一分鐘或兩分鐘。更難的部分是,我們不允許使用任何循環,並且只有3次調用fork()總數。幾乎所有關於fork和n個進程的信息都告訴用戶使用for循環。我也看過這裏找到類似的東西,但是,再次,爲循環。

我已經成功創建了8個,但這太多了。所以我想知道是否可以分叉或殺死特定的進程。

例如:給定第一個分支,你得到父進程和子進程。再次分叉,你有兩個孩子的原始父母和一個孩子的第一個孩子。那麼是否可以僅派生()只有擁有一個孩子的原始孩子?我發現的一切似乎都表明,在所有派生進程執行fork調用後發生的任何事情,所以我不確定如何實現我需要執行的操作。

+2

六個顯式調用'fork' *父只*? –

+0

對不起,我改變了一些問題來解釋更多。我只能在代碼總數中調用fork()3次。 – KM529

+1

這可能有所幫助:http://stackoverflow.com/questions/21387349/how-does-the-fork-know-whether-it-is-in-child-process-and-in-parent-process – chiaboy

回答

6

訣竅是使用fork返回值(< 0是一個錯誤,== 0是孩子和> 0是父進程),讓第一個孩子沒有要求fork拿到3個流程:

//we start with 1 process 
if (fork() > 0) //now we have 2 processes 
    fork(); //only the parent calls this fork because of the if, so we have 3 processes 
fork(); //all 3 processes calls this fork, so we have 6 processes 

另一種可能性:

fork(); //2 
if (fork() > 0) //4 
    fork(); //only the 2 parents from the second call will call this ==> 6