2014-02-09 34 views
0

我有一個處理程序SIGCHLD在一個過程中,產生了許多孩子。爲什麼waitpid()只對所有子進程返回1?

此代碼位於我的處理程序中,pid始終爲1。我讀過pid應該是子進程id。爲什麼我一直在回1

int status; 
pid_t pid; 

while(pid = waitpid(-1, &status, WNOHANG) > 0) 
{   
    if (WIFEXITED(status)) 
     printf("Child %ld: Ended properly and returned %d\n", pid, WEXITSTATUS(status)); 
    else 
     printf("Child crashed\n"); 
} 

初始化處理函數的代碼。

void initSIGCHLDSignalHandler() 
{ 
    struct sigaction act; 

    memset(&act,'\0',sizeof(struct sigaction)); 
    sigemptyset(&act.sa_mask); 
    act.sa_flags = SA_NOCLDSTOP | SA_RESTART; 
    act.sa_handler = SIGCHLD_SignalHandler; 

    sigaction(SIGCHLD, &act, NULL); 
} 

回答

1

我想你想

while((pid = waitpid(-1, &status, WNOHANG)) > 0) 

,因爲現在所有你得到的是 「真」。 (您的編譯器可能會對此提出警告,因此請仔細閱讀您的編譯器警告。)

+0

我只是在您發佈的時候這樣做的。工作。謝謝。 –

+0

新人的錯誤。 –

相關問題