【发布时间】:2011-06-17 08:06:26
【问题描述】:
在 C++ 中使用fork 系统调用时,如果执行应该执行的操作花费太多时间,那么杀死子进程的最简单方法是什么?
如果它以某种方式进入无限循环..父进程应该如何设置子进程的超时?
【问题讨论】:
-
有更好的选择:修复无限循环。
在 C++ 中使用fork 系统调用时,如果执行应该执行的操作花费太多时间,那么杀死子进程的最简单方法是什么?
如果它以某种方式进入无限循环..父进程应该如何设置子进程的超时?
【问题讨论】:
使用WNOHANG 和waitpid 并在两者之间休眠。应该这样做:
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) {
/* ... */
}
【讨论】:
我认为您需要 waitpid 超时和超时 kill 子进程(假设子进程已挂起)。检查此页面以获取想法:
Waitpid equivalent with timeout?
【讨论】: