2

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

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

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

1 回答 1

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 数组。

于 2014-10-01T19:47:42.340 回答