【问题标题】:C++: how to check whether an external program is running?C++:如何检查外部程序是否正在运行?
【发布时间】:2011-03-30 05:57:36
【问题描述】:

我用 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

C++ 中 p.poll() 和 p.terminate() 的替代方法是什么?

谢谢

附:也欢迎涉及 WinAPI 的解决方案。

【问题讨论】:

  • 您使用的是哪个平台?与 Python(以半可移植的方式为您抽象这些操作)不同,在 C 中,每个操作系统的执行方式都不同。
  • 无赖,我对 Windows 的了解还不够,无法帮助您。但无论如何,我发布了一个 Unix 答案。 :-P

标签: python c++ windows external-process process-management


【解决方案1】:

有一个MS knowledge base entry 描述了如何干净地终止应用程序。本质上,如果您只想终止进程并且不关心潜在的副作用,那么您可以使用TerminateProcess

检查进程是否仍在运行的 Windows API 方法是GetExitCodeProcess

【讨论】:

    【解决方案2】:

    如果您可以在操作系统级别而不使用 Python 解决此问题。例如。可能会调查

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

    或者你检查一下 Python 的资源模块:

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

    【讨论】:

      【解决方案3】:

      我只能评论 Unix,因为那是我最了解的平台。

      • p.poll() 变为 kill(pid, 0)
      • p.terminate() 变为 kill(pid, SIGTERM)

      【讨论】:

      • 谢谢,这在未来可能会有用:)
      猜你喜欢
      • 2015-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-11
      • 2014-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多