用unix信号优雅地终止Qt应用程序

Graceful termination of Qt application by unix signal

本文关键字:终止 Qt 应用程序 unix 信号      更新时间:2023-10-16

我在应用程序中保存设置有问题。这在相关对象的析构函数中完成。它是一个启动器,通过关闭终止是一个标准的情况。应用程序实际保存设置的唯一方法是手动关闭它或关闭会话(至少在肉桂上,我猜这只是关闭所有窗口)。甚至sudo reboot也会阻止Qt应用程序展开堆栈上的对象。用killall -s <signal> <app>终止对SIGINTSIGKILLSIGTERM具有相同的效果。我怎么能强迫我的qt应用程序优雅地终止在SIGTERM ?也不会触发aboutToQuit

有一个unix信号处理程序允许调用的最小函数集。它们被称为异步信号安全函数。调用其他所有东西,包括每个Qt函数,会导致未定义的行为。

仍然有一种在Qt中处理unix信号的方法,该方法使用自管道技巧,并在Qt文档文章"从unix信号处理程序调用Qt函数"中进行了描述。

基本上你打开一个管道,每当你得到一个信号你::write(...)(这是一个异步信号安全的函数)到管道。在另一端,使用QSocketNotifier侦听管道。要了解实现细节,请查看上面提到的Qt文章。