2014-10-02 136 views
0

我正在創建一個程序,可以從一個父項創建許多子項。 如果執行exec時出錯,我不希望再創建任何子項。 即使執行失敗後,以下代碼仍然會繼續創建子項。如果exec失敗,殺死子進程

void synch_signal (int sig) 
{ 
    fprintf(stderr,"%s","ERROR"); 
    exit(0); 
} 


void create_children(int numberOfChildren, char **argc){ 
    struct sigaction usr_action; 

    usr_action.sa_handler = synch_signal; 
    sigaction (SIGUSR1, &usr_action, NULL); 

    int pid = 0; 
    char mystring[100] = { 0 }; 

    for (i; i <numberOfChildren; i++){ 


     //removed for simplicity. 

     pid = fork(); 

     if (pid){  
      //removed  
     } 
     else { 
      //removed 
      exec(...); 
      //exec failed 
      kill (getppid(), SIGUSR1); 
     } 


    } 


} 

感謝 丹尼爾

+0

您是否嘗試將'SIGUSR1'更改爲'SIGTERM'? – SSC 2014-10-02 08:54:50

+0

@SSC,是的。一樣 – dgamma3 2014-10-02 09:01:02

回答

3

您需要kill()後添加return語句,否則子進程將再次循環完成kill()功能之後,它變成了父母。