2014-03-04 28 views
0

是否可以根據父進程中發生的情況創建多個子進程?例如,通過在我的父進程中進行計算,我決定需要3個子進程,它可能是4,5或6.然後最終將整數一次一個傳入子進程,並從中獲取退出值。有沒有辦法在C中實現這一點?在C中,如何創建多個子進程(不知道你需要多少個)?

+0

[如何在execlp()之後找到程序的返回值?](http://stackoverflow.com/questions/22138007/how-to-find-the-return-value-of-a -exec -p -program-after-execlp) –

+0

是的。閱讀[高級Linux編程](http://advancedlinuxprogramming.com/) –

+1

計算後可以簡單地創建儘可能多的孩子。 使用一個循環來創建儘可能多的孩子,並且對於孩子描述符ID變量,可以在運行時(你想要孩子的數量)取一個整數指針併爲它分配一個記憶。然後使用循環簡單地創建子女 –

回答

0

事情是這樣的:

int childs = 5; // I want 5 childs 
pid_t pid; 

while (childs > 0) 
    { 
    if ((pid = fork()) == -1) 
     return (1); // handle this error as you want 
    if (pid == 0) 
     break; 
    childs--; 
    } 
// the child go there directly 

可以使用將爲pid_t數組/列表記住所有你的孩子,並使用waitpid函數來檢查它們的狀態。

編輯:

的方式來處理不同的孩子的,並與陣列記住他們:

int childs = 5; // I want 5 childs 
pid_t pid[childs]; 
int i; 

for (i=0; i < childs; ++i) { 
    if ((pid[i] = fork()) == -1) 
    return (1); // handle this error as you want 
    if (pid[i] == 0) { 
    break; 
    } 
} 
switch (i) { 
case 0: 
    return(function0()); 
    break; 
case 1: 
    return(function1()); 
    break; 
case 2: 
    return(function2()); 
    break; 
case 3: 
    return(function3()); 
    break; 
case 4: 
    return(function4()); 
    break; 
default: 
    ; 
} 

我完全不知道你想做什麼,你也可以使用模(% )操作員在一個條件下調用正確的功能。 我在那裏使用return,因爲我們不想再留在for循環中,'functionx()'將完成整個新的進程任務。您也可以在該功能中使用。

您現在有一個pid_t數組,因此您可以在循環中檢查孩子的狀態。

+0

嗯..我怎樣才能訪問每個人的孩子呢?假設我想在不同的孩子身上做不同的事情 – Pig

+0

你不能真的「訪問」它。如果你想要你的每個孩子執行一個特定的功能,你可以簡單地使用一個計數器,並根據這個計數器的值調用一個不同的函數。我會用一個例子編輯我的帖子。 – Jean

相關問題