簡體   English   中英

如果執行失敗,則殺死子進程

[英]kill child process if exec fails

我正在創建一個程序,該程序可以從一個父母那里創建許多孩子。 如果執行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);
        }


    }


}

謝謝丹尼爾

您需要在kill()之后添加return語句,否則子進程將在kill()函數完成后再次循環,並成為父進程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM