2011-06-17 47 views
4

在C++中使用fork系统调用时,如果执行应执行的任务需要太多时间才能终止子进程,那么最简单的方法是什么?如果花费太多时间就会终止子进程

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

+0

有更好的选择:修复无限循环。 – 2011-06-17 12:47:44

回答

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) { 
    /* ... */ 
} 
相关问题