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++:如何检查外部程序是不是正在运行?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过使用 C、C++ 在 Linux 上指定其名称以编程方式检查特定守护程序是不是正在运行?

如何使用 Qt (C++) 检查程序是不是按其名称运行

如何使用 C++ 检查进程是不是正在运行

如何在 gedit 中使用外部工具交互式运行 C++ 程序

如何检查程序是不是从自动启动运行?

如何检查 url 是不是指向外部角度应用程序