【问题标题】:How to set a timeout for multiple child process如何为多个子进程设置超时
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-09-27
      • 2012-11-11
      • 2018-11-10
      • 2012-05-03
      • 2010-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多