简体   繁体   English

如果执行失败,则杀死子进程

[英]kill child process if exec fails

I am creating a program that creates many children from one parent. 我正在创建一个程序,该程序可以从一个父母那里创建许多孩子。 I do not want any more children to be created, if there was an error executing exec . 如果执行exec时发生错误,我不希望再创建任何子代。 The following code still continues to create children even after an exec failure. 即使执行失败,以下代码仍继续创建子代。

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);
        }


    }


}

thanks daniel 谢谢丹尼尔

您需要在kill()之后添加return语句,否则子进程将在kill()函数完成后再次循环,并成为父进程。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM