[英]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 文章。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.