Выполнение другой программы из C ++ с заданным временем ожидания - PullRequest
3 голосов
/ 14 марта 2011

Я пишу программу (реализация генетического алгоритма), которая выполняет другую программу, используя «системный» метод для расчета пригодности. Проблема в том, что другая программа иногда зависает на неограниченное количество времени. Как я могу выполнить программу с ограничением по времени из C ++.

Приветствуются решения как POSIX, так и C ++. И более или менее это будет запущено после того, как приложение, так что решение не должно быть очень элегантным.

Я использую дистрибутив Linux CentOS и тестирую на Cygwin. Для компилятора я использую gcc 4.1.2 с библиотекой boost.

Любая помощь приветствуется

Ответы [ 3 ]

6 голосов
/ 14 марта 2011

Вместо system, запустите программу с идиомой fork / exec.Перед exec установите максимальное значение RLIMIT_CPU, указав setrlimit в дочернем элементе.

Убедитесь, что дочерний элемент не игнорирует SIGXCPU (что маловероятно).

6 голосов
/ 14 марта 2011

Вы можете создать таймер (например, с помощью таймер повышения ) и затем попытаться убить дочерний процесс ... это предполагает, что вы используете fork и exec для запуска всего вашего ребенка, и вы сохранили каждый пид.

0 голосов
/ 14 марта 2011
  1. Если эта «другая» программа принадлежит вам или у вас есть источники по публичной лицензии, лучше, вероятно, сделать ее не отдельной программой, а отдельным потоком в основной программе.В этом случае вы можете легко управлять им.

  2. Если эта «другая» программа принадлежит вам или у вас есть источники по публичной лицензии, но вы не хотите (или не можете) следовать предложениювыше может быть проще исправить программу, чтобы предотвратить зависание.

  3. Дерьмовый метод:

    • do fork (), PID запоминания, вызов exec * ("my-prog", ...)
    • создать поток в основной программе с таймером.
    • , когда время запускает процесс с помощью kill () и PID запоминается.
...