2014-01-24 64 views
0

我正在編寫一個旨在固定CPU使用率的程序,我將其用作衡量性能的工具。該程序非常簡單,它從父級產生5個子進程。以下是我的代碼片段父進程不等待兒童 - C

int main(int argc, char **argv) { 
    pid_t pid = 0; 
    int i; 

    for(i = 0; i < 5; i++) 
    //create 5 additional processes 
    if((pid = fork()) == 0) { 
     //do CPU intensive task 
     break; 
    } 

    //fork error 
    if(pid == -1) { 
    perror("<fork failed>\n"); 
    return EXIT_FAILURE; 
    } 

    //if parent 
    if(pid != 0) 
    //wait for children to finish 
    wait(NULL); 

    return EXIT_SUCCESS; 
} 

但是父進程儘管等待(NULL)函數立即退出。任何關於爲什麼會發生這種情況以及如何修復的想法都將不勝感激。

+0

你確定孩子仍在運行?你沒有明確說明。 – Keith

+0

等待失敗?也許將errno設置爲EFAULT? –

+0

我確定孩子們還在跑步,我可以看到他們使用「頂」 – ThreadedLemon

回答

1

你只要其中任何一個退出創建5個孩子,但wait回報。您想等待所有這些,所以您需要重複撥打wait。該wait函數返回-1,並將errnoECHILD時,你有沒有孩子離開:

while (wait(NULL) != -1 || errno != ECHILD) { 
    // nothing 
} 
0

使用waitpid()函數調用。在你的情況下你的產卵5子進程。用最新的孩子覆蓋這個pid。

等待()等待任何子進程不完成。

當任何一個孩子完成其執行併發送一個信號SIGCHLD回到調用進程,這足以終止。

所以如果你想所有5子進程來執行,然後家長來完成指定PID的單獨