用unix信号优雅地终止Qt应用程序
Graceful termination of Qt application by unix signal
我在应用程序中保存设置有问题。这在相关对象的析构函数中完成。它是一个启动器,通过关闭终止是一个标准的情况。应用程序实际保存设置的唯一方法是手动关闭它或关闭会话(至少在肉桂上,我猜这只是关闭所有窗口)。甚至sudo reboot
也会阻止Qt应用程序展开堆栈上的对象。用killall -s <signal> <app>
终止对SIGINT
、SIGKILL
和SIGTERM
具有相同的效果。我怎么能强迫我的qt应用程序优雅地终止在SIGTERM
?也不会触发aboutToQuit
有一个unix信号处理程序允许调用的最小函数集。它们被称为异步信号安全函数。调用其他所有东西,包括每个Qt函数,会导致未定义的行为。
仍然有一种在Qt中处理unix信号的方法,该方法使用自管道技巧,并在Qt文档文章"从unix信号处理程序调用Qt函数"中进行了描述。
基本上你打开一个管道,每当你得到一个信号你::write(...)
(这是一个异步信号安全的函数)到管道。在另一端,使用QSocketNotifier侦听管道。要了解实现细节,请查看上面提到的Qt文章。
相关文章:
- 初始化和终止Qt应用程序的正确方法?
- 编译Qt项目,得到错误QQmlEngine:没有这样的文件或目录编译终止
- 此应用程序已请求运行时以异常方式终止它 QT C++
- 无法在线程运行方法中运行CryptoPP FileSink的情况下终止Qt线程
- 在程序关闭期间终止Qt工作线程
- 我的Qt C++程序以一种不同寻常的方式终止
- 关闭Qt控制台应用程序会终止exec()调用中的进程,并且无法从main()扩展到范围
- QT:无法在启动/停止按钮中终止 Qprocess
- QT中的运行和终止进程C++通过按下按钮
- 初始化失败时如何终止qt编程
- 终止Qt进程:Windows任务管理器在做什么,我没有?
- C++/Qt有效负载中的字符串终止
- 如何安全地终止QT中不同线程上运行的对象
- Qt 5.5.0 在 Windows 上使用 mingw:编译的可执行文件无法终止
- 如何终止长时间运行的Qt线程
- QT中的程序终止回调
- Qt处理进程终止
- 用unix信号优雅地终止Qt应用程序
- Qt主窗口在线程终止后出现
- Qt终止线程衍生QConcurrent::run