簡體   English   中英

通過 unix 信號優雅地終止 Qt 應用程序

[英]Graceful termination of Qt application by unix signal

我在我的應用程序中保存設置時遇到問題。 這是在相關對象的析構函數中完成的。 它是一個啟動器,通過關閉終止是標准情況。 應用程序實際保存設置的唯一方法是手動關閉它或關閉會話(至少在肉桂上,我猜這只會關閉所有窗口)。 即使sudo reboot也會阻止 Qt 應用程序展開堆棧上的對象。 通過killall -s <signal> <app>終止對SIGINTSIGKILLSIGTERM具有相同的效果。 如何強制我的 qt 應用程序在SIGTERM上正常終止? aboutToQuit也不會發出。

Unix 信號處理程序允許調用的最小函數集。 它們被稱為異步信號安全函數。 調用其他所有內容,包括每個 Qt 函數,都會導致未定義的行為。

仍然有一種方法可以在 Qt 中處理 unix 信號。 該方法使用自管道技巧,並在 Qt 文檔文章“從 Unix 信號處理程序調用 Qt 函數”中進行了描述

基本上你打開一個管道,每當你收到信號時,你::write(...) (這是一個異步信號安全函數)到管道。 在另一端,您使用QSocketNotifier收聽管道。 有關實現細節,請查看上面提到的 Qt 文章。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM