我正在创建一个程序。它创建了一些子进程。子进程在不同轮次中随机杀死其他子进程。在第一轮之后,一些子进程已经死亡,其他进程仍然存活。所以我创建了一个" 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]);
}
答案 0 :(得分:0)
创建一个警报处理函数,并在警报处理函数内部,将全局变量interrupted
设置为1.然后在for循环中,在每次迭代时检查interrupted
。如果interrupted
为1,则会跳出for循环。