我在循环中创建多个子进程。 每个孩子都会做这件事,其中任何一个都可以先结束。 (不确定是否相关但是:每个孩子也有一个孙子)
当一个子进程完成后,如何等待任何子进程终止并停止其他进程?
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;
}
}
答案 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数组。