C - 等待一个孩子终止

时间:2014-10-01 19:41:53

标签: c fork waitpid

我在循环中创建多个子进程。 每个孩子都会做这件事,其中任何一个都可以先结束。 (不确定是否相关但是:每个孩子也有一个孙子)

当一个子进程完成后,如何等待任何子进程终止并停止其他进程?

for(i=0; i<numberOfChildren; i++)
{
    pid = fork();
    if(pid < 0)
    {
        fprintf(stderr, "Error: fork Failed\n");
        return EXIT_FAILURE;
    }
    /* Child Process */
    if(pid == 0)
    {
        /* Do your thing */
    }
    /* Parent process */
    else
    {
        childrenPid[i]=pid;
    }
}

1 个答案:

答案 0 :(得分:3)

您可以暂停父级,直到其子级之一通过wait调用终止,然后kill其余子级终止:

#include <sys/types.h>
#include <wait.h>

int status;
childpid = wait(&status)

然后,如果您已经存储了在数组中创建的所有子项的进程ID,则可以终止剩余的子项:

#include <sys/types.h>
#include <signal.h>

for(i = 0; i < nchildren; i++)
    if (children[i] != childpid)
        kill(children[i],SIGKILL)

其中nchildren是创建的子项数的整数计数,children是创建的子项的pid_t数组。