使用指定的运行超时从C ++执行另一个程序

时间:2011-03-14 11:23:11

标签: c++ linux unix gcc posix

我正在编写一个程序(遗传算法实现),它使用“系统”方法执行另一个程序来计算适应度。问题是另一个程序有时会挂起无限的时间。如何从C ++开始执行一个有时间限制的程序。

POSIX和c ++解决方案都受到赞赏。或多或少这将在应用程序运行后因此解决方案不一定非常优雅。

我正在运行Linux CentOS发行版并在Cygwin上进行测试。对于编译器,我使用gcc 4.1.2和boost库。

任何帮助都是apreciated

3 个答案:

答案 0 :(得分:6)

而不是system,使用fork / exec惯用法执行程序。在exec之前,将RLIMIT_CPU设置为孩子中setrlimit的最大值。

确保孩子不会忽略SIGXCPU(这是非常不可能的)。

答案 1 :(得分:6)

您可以创建一个计时器(例如boost timer),然后尝试kill子进程...这假设您使用forkexec来启动所有孩子,然后存储每个pid。

答案 2 :(得分:-2)

  1. 如果这个'另一个'程序是您的,或者您拥有公共许可证下的源代码,那么最好不要让它不是一个单独的程序而是主程序中的一个单独的程序。在这种情况下,您可以轻松控制它。

  2. 如果这个“另一个”程序是您的,或者您拥有公共许可证下的来源但不希望(或不能)遵循上述建议,则可能更容易修复程序以防止挂起。< / p>

  3. Shitty方法:

    • 做fork(),记住PID,调用exec *(“my-prog”,...)
    • 使用计时器在主程序中创建线程。
    • 当时间触发使用kill()和PID记住来终止进程时。