C++ 通过unix信号优雅地终止Qt应用程序
我在应用程序中保存设置时遇到问题。这是在相关对象的析构函数中完成的。它是一个发射器,通过关机终止是一个标准情况。应用程序实际保存设置的唯一方法是手动关闭它或关闭会话(至少在肉桂上,我想这只是关闭所有窗口)。甚至C++ 通过unix信号优雅地终止Qt应用程序,c++,qt,signals,terminate,C++,Qt,Signals,Terminate,我在应用程序中保存设置时遇到问题。这是在相关对象的析构函数中完成的。它是一个发射器,通过关机终止是一个标准情况。应用程序实际保存设置的唯一方法是手动关闭它或关闭会话(至少在肉桂上,我想这只是关闭所有窗口)。甚至sudo reboot都会阻止Qt应用程序展开堆栈上的对象。通过killall-s终止也不会发出。unix信号处理程序可以调用的函数集最少。它们被称为异步信号安全函数。调用其他所有函数,包括每个Qt函数,都会导致未定义的行为 仍然有一种方法可以在Qt中处理unix信号。该方法使用自管道技巧
sudo reboot
都会阻止Qt应用程序展开堆栈上的对象。通过killall-s终止也不会发出。unix信号处理程序可以调用的函数集最少。它们被称为异步信号安全函数。调用其他所有函数,包括每个Qt函数,都会导致未定义的行为
仍然有一种方法可以在Qt中处理unix信号。该方法使用自管道技巧,并在Qt文档文章中进行了描述
基本上,你打开一个管道,每当你得到一个信号,你就向管道写入(…)(这是一个异步信号安全函数)。在另一端,你用一个声音来听管道。有关实现细节,请查看上面提到的Qt文章。您想要的是在进程中捕获SIGTERM信号并相应地处理它。更多信息。谢谢,这些链接包含解决方案。