我正在为专业视频构建一个故障保护应用程序。Qt应用程序检查第二个屏幕的4个角,如果它们是某个RGB值(我使用特殊的背景),Qt程序知道它崩溃了,所以它发送一个信号到videomixer淡出到另一个输入。
现在我还想添加一个检查,看看视频程序是否没有崩溃(可能是视频程序没有响应,但仍然显示输出,所以我在第二个屏幕上看不到桌面)。我知道我可以使用Qprocess来启动一个外部进程。把它挂接到一个已经运行的进程上并不是那么容易。
现在的问题是:我如何检查程序是否崩溃(所以“没有响应”),并尽可能快地看到这一点,以便我可以淡出到另一个视频输入。当我的Qt程序崩溃时会发生什么,它也会退出子进程吗?
谢谢!
发布于 2014-01-27 22:38:29
使用QProcess创建一个附加的进程,所以不幸的是,当您的进程终止时,它将被终止。当您使用静态方法QProcess::startDetached创建分离的流程时,您将无法获得监视功能。
您需要编写一个特定于平台的小型监视类,该类可以启动分离的进程并通知您其状态的更改。在实现时,您需要使用原生API。QProcess的资源可以很好地启发我们从哪里开始。
发布于 2016-01-12 22:36:37
@KubaOber在他的声明中部分正确。如果你启动并分离一个进程,那么你实际上就失去了与它通信的Qt方式,并监控它做了什么。然而,您的操作系统提供了大量的解决方案来监督它发生了什么。在Linux上,您可以使用:
pgrep检查进程是否正在运行(将命令作为子进程执行,并查看返回0(进程正在运行)还是返回1(进程不再运行)$?或变量(如链接中所述)检查其退出statuskill允许您通过管道进行大量控制然而,您应该注意到,特别是在Windows上,有许多程序不遵循Unix的退出代码约定(0 =正常退出,其他任何情况-发生错误)。此外,崩溃只是进程结束时的错误状态。退出代码告诉您发生了错误,但就崩溃而言,您可能无法仅通过查看它来实现此目的。
https://stackoverflow.com/questions/21376586
复制相似问题