如果花费太多时间,则杀死子进程

时间:2011-06-17 08:06:27

标签: c++ fork

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

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

2 个答案:

答案 0 :(得分:5)

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) {
    /* ... */
}

答案 1 :(得分:0)

我认为你需要waitpid超时和超时kill子进程(假设孩子挂起)。查看此页面以获取建议: Waitpid equivalent with timeout?