【问题标题】:Killing a child process if it takes too much time如果花费太多时间,则终止子进程
【发布时间】:2011-06-17 08:06:26
【问题描述】:

在 C++ 中使用fork 系统调用时,如果执行应该执行的操作花费太多时间,那么杀死子进程的最简单方法是什么?

如果它以某种方式进入无限循环..父进程应该如何设置子进程的超时?

【问题讨论】:

  • 有更好的选择:修复无限循环。

标签: c++ fork


【解决方案1】:

使用WNOHANGwaitpid 并在两者之间休眠。应该这样做:

while (times < max_times) {
    sleep(5); /* sleep 5 seconds */
    rc = waitpid(-1, &status, WNOHANG);
    if (rc < 0) {
        perror("waitpid");
        exit(1);
    }
    if (WIFEXITED(status) || WIFSIGNALED(status)) {
        /* it's done */
        break;
    }
    times++;   
}

if (times == max_times) {
    /* ... */
}

【讨论】:

    【解决方案2】:

    我认为您需要 waitpid 超时和超时 kill 子进程(假设子进程已挂起)。检查此页面以获取想法: Waitpid equivalent with timeout?

    【讨论】:

      猜你喜欢
      • 2015-11-28
      • 2017-03-03
      • 2023-03-10
      • 1970-01-01
      • 2021-05-01
      • 2014-07-29
      • 1970-01-01
      • 2016-05-15
      相关资源
      最近更新 更多