2015-10-12 37 views
2

我在保存应用程序中的设置时遇到问题。这是在相关对象的析构函数中完成的。它是一个启动器,并通过关机终止是一个标准情况。应用程序实际保存设置的唯一方法是手动关闭它或关闭会话(至少在肉桂上,我想这只是关闭所有窗口)。即使sudo reboot也会阻止Qt应用程序解除堆栈上的对象。终止killall -s <signal> <app>SIGINTSIGKILLSIGTERM具有相同的效果。我如何强制我的qt应用程序正常终止于SIGTERMaboutToQuit也没有发射。通过unix信号优美地终止Qt应用程序

+0

你想要的是在你的过程中捕获SIGTERM信号并相应地处理它。更多信息[here](http://stackoverflow.com/questions/17942034/simple-linux-signal-handling)。 –

+0

http://stackoverflow.com/a/975736/1122645 – UmNyobe

+0

谢谢,这些链接包含解决方案。 – ManuelSchneid3r

回答

2

不幸的是,互联网传播了大量明显的错误信息,导致未定义行为的方式。有一个允许unix信号处理程序调用的最小函数集。它们被称为异步信号安全函数。调用其他所有东西,包括每个Qt函数,都会导致undefined beghaviour。仍然有一种方法可以处理Qt中的unix信号。这种方式使用自我管理技巧,并在Qt文档文章"Calling Qt Functions From Unix Signal Handlers"中描述。

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