如何为多个子进程设置超时

时间:2014-12-08 09:41:29

标签: c linux signals system call

我正在创建一个程序。它创建了一些子进程。子进程在不同轮次中随机杀死其他子进程。在第一轮之后,一些子进程已经死亡,其他进程仍然存活。所以我创建了一个" for"等孩子完成:

for (i = 0; i < numChild; i++) {

      pidReturned[i] = wait(&returnValue[i]);

}

问题在于并非所有流程都会死亡,所以我必须告诉父亲&#34;他必须停止等待不会死的过程。我用sigaction修改了SIGALRM以避免它杀死我的父亲。然后我打电话报警(1);因为我想&#34;醒来&#34;父亲 这只适用于第一轮之后只有一个孩子还活着的情况,但如果有两个或两个以上的儿童,那么这只适用于&#34;仍在等待所有仍然存在的进程。所以我不知道如何阻止多个等待而不仅仅是一个等待。 Ty请你注意

编辑:所有等待部分都是这样的:

sigemptyset(&block_kill);
sigaddset(&block_kill,SIGALRM);
sigaddset(&block_kill,SIGCHLD);

alarm(1);

sigprocmask (SIG_UNBLOCK, &block_kill, NULL);

for (i = 0; i < numChild; i++) {

     pidReturned[i] = wait(&returnValue[i]);

}

1 个答案:

答案 0 :(得分:0)

创建一个警报处理函数,并在警报处理函数内部,将全局变量interrupted设置为1.然后在for循环中,在每次迭代时检查interrupted。如果interrupted为1,则会跳出for循环。