C++:如何检查外部程序是不是正在运行?
Posted
技术标签:
【中文标题】C++:如何检查外部程序是不是正在运行?【英文标题】: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 【参考方案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)
【讨论】:
谢谢,这在未来可能会有用:)以上是关于C++:如何检查外部程序是不是正在运行?的主要内容,如果未能解决你的问题,请参考以下文章