首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Qt检查外部进程是否崩溃

Qt检查外部进程是否崩溃
EN

Stack Overflow用户
提问于 2014-01-27 16:58:40
回答 2查看 1.2K关注 0票数 1

我正在为专业视频构建一个故障保护应用程序。Qt应用程序检查第二个屏幕的4个角,如果它们是某个RGB值(我使用特殊的背景),Qt程序知道它崩溃了,所以它发送一个信号到videomixer淡出到另一个输入。

现在我还想添加一个检查,看看视频程序是否没有崩溃(可能是视频程序没有响应,但仍然显示输出,所以我在第二个屏幕上看不到桌面)。我知道我可以使用Qprocess来启动一个外部进程。把它挂接到一个已经运行的进程上并不是那么容易。

现在的问题是:我如何检查程序是否崩溃(所以“没有响应”),并尽可能快地看到这一点,以便我可以淡出到另一个视频输入。当我的Qt程序崩溃时会发生什么,它也会退出子进程吗?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2014-01-27 22:38:29

使用QProcess创建一个附加的进程,所以不幸的是,当您的进程终止时,它将被终止。当您使用静态方法QProcess::startDetached创建分离的流程时,您将无法获得监视功能。

您需要编写一个特定于平台的小型监视类,该类可以启动分离的进程并通知您其状态的更改。在实现时,您需要使用原生API。QProcess的资源可以很好地启发我们从哪里开始。

票数 1
EN

Stack Overflow用户

发布于 2016-01-12 22:36:37

@KubaOber在他的声明中部分正确。如果你启动并分离一个进程,那么你实际上就失去了与它通信的Qt方式,并监控它做了什么。然而,您的操作系统提供了大量的解决方案来监督它发生了什么。在Linux上,您可以使用:

  • pgrep检查进程是否正在运行(将命令作为子进程执行,并查看返回0(进程正在运行)还是返回1(进程不再运行)
  • 您可以使用proc文件系统查看进程何时终止(请参见here),然后使用$?或变量(如链接中所述)检查其退出status
  • kill允许您通过管道进行大量控制

然而,您应该注意到,特别是在Windows上,有许多程序不遵循Unix的退出代码约定(0 =正常退出,其他任何情况-发生错误)。此外,崩溃只是进程结束时的错误状态。退出代码告诉您发生了错误,但就崩溃而言,您可能无法仅通过查看它来实现此目的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21376586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档