C ++: как проверить, работает ли внешняя программа? - PullRequest
0 голосов
/ 30 марта 2011

Я запускаю внешнюю программу с C ++:

_wsystem(exec);

Я хочу завершить процесс, если он выполняется более n секунд.Я могу сделать это на Python следующим образом:

p = subprocess.Popen(self.temp_exec, shell=True)

cur_time = 0.0

while cur_time < self.time_limit:
            if p.poll() != None:
                # Kill the process
                                    p.terminate()
                break
            time.sleep(0.1)
            cur_time += 0.1

Какова альтернатива p.poll () и p.terminate () в C ++?

Спасибо

PS Также приветствуются решения с использованием WinAPI.

Ответы [ 3 ]

1 голос
/ 30 марта 2011

Имеется запись в базе знаний MS , описывающая, как правильно завершать работу приложений. По сути, если вы просто хотите убить процесс и не беспокоиться о возможных побочных эффектах, тогда вы можете просто использовать TerminateProcess.

Windows API для проверки того, запущен ли еще процесс, - GetExitCodeProcess.

0 голосов
/ 30 марта 2011

Я могу комментировать только Unix, так как это платформа, которую я знаю лучше всего.

  • p.poll() становится kill(pid, 0)
  • p.terminate() становится kill(pid, SIGTERM)
0 голосов
/ 30 марта 2011

Если вы можете решить эту проблему на уровне ОС и не используя Python.Например, вы можете заглянуть в

http://devel.ringlet.net/sysutils/timelimit/

Или вы можете проверить ресурсный модуль Python:

http://docs.python.org/library/resource.html

...