【发布时间】:2014-12-08 09:41:29
【问题描述】:
我正在创建一个程序。它创建了一些子进程。子进程在不同轮次中随机杀死其他子进程。在第一轮之后,一些子进程已经死了,而其他的还活着。所以我创建了一个“for”来等待孩子完成:
for (i = 0; i < numChild; i++) {
pidReturned[i] = wait(&returnValue[i]);
}
问题是并非所有进程都会死,所以我必须告诉“父亲”他必须停止等待不会死的进程。我用 sigaction 修改了 SIGALRM 以避免它杀死我的父亲。然后我打电话给警报(1);因为我想“唤醒”父亲。 这仅在第一轮后只有一个孩子还活着的情况下才有效,但如果有两个或更多,“for”仍在等待所有仍然活着的进程。所以我不知道如何停止多个等待,而不仅仅是一个。 提请注意
编辑:所有的等待部分都是这样的:
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]);
}
【问题讨论】:
标签: c linux signals system call