我需要检测应用程序是否正常退出或崩溃。 QProcess具有finished()信号并且可以获得退出代码。但是当应用程序崩溃或关闭时,我需要QApplication的退出代码。
答案 0 :(得分:2)
当您的流程崩溃时,它就消失了。崩溃意味着由于未处理的异常,进程已完成。你的工作应该是防止崩溃。换句话说:处理异常。请注意,异常可能不是C ++异常,它们可能是低级平台特定机制,例如Windows上的本机异常或UNIX上的信号。您必须处理这些问题,但要认识到基本问题并不仅仅因为您捕获到这样的例外而得到解决。您必须假设应用程序的状态已损坏,唯一安全的做法是尽快退出ASAP。例如,不要尝试修改任何文件:您可能会损坏它们。
答案 1 :(得分:0)
我不认为这是你可以做的事情。读取QApplication::exec()
返回的值与Qt基础结构有关:
进入主事件循环并等待直到调用exit(),然后 返回设置为exit()的值(如果exit()为0则为0) 通过quit()调用。
通常你的主要是这样的:
#include <QApplication>
int main( int argc, char **argv )
{
QApplication a( argc, argv );
// Initialize your widget(s)
return a.exec(); // You can store this and check its value
}
但是,如果我没有弄错,这不包括处理应用程序崩溃(分段错误,未处理的异常等)。在Linux中,人们通常使用启动应用程序的脚本,然后在应用程序退出或崩溃后读取其退出代码。如果您使用Linux,则可以使用echo $?
从bash脚本(或其等效的不同shell)中读取退出代码,然后根据其值执行某些操作。
另请注意,您至少可以执行一些异常处理,因为某些崩溃会导致这种情况 - 由于某种原因而被抛出并且未正确处理的异常。 Qt中未处理的异常会传播到顶层(即QCoreApplication
)。