Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 通过unix信号优雅地终止Qt应用程序_C++_Qt_Signals_Terminate - Fatal编程技术网

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信号并相应地处理它。更多信息。谢谢,这些链接包含解决方案。