2013-12-11 48 views
1

我正在開發gui應用程序(C++/Qt),現在正在尋找應用程序的正確(記錄)終止方式。是否有任何文檔說明Unity DE如何通知gui應用程序退出(Windows上的WM_QUERYENDSESSION信號的某些模擬)?在Unity,Ubuntu中捕捉關閉事件的方法13.04

+0

它在什麼DE應用程序正在運行?可能有一個DE/OS獨立的方式? –

回答

0

man 8 shutdown

關閉發送給init(8)服務的請求,使系統分解成相應的運行級別。這是通過發出runlevel(7)事件來執行的,該事件包括RUNLEVEL環境變量中的新運行級別以及PREVLEVEL變量中的以前的運行級別(從環境或從/ var/run/utmp獲取)。

換句話說,你可以捕捉信號SIGTERM您的應用程序,並在收到它,通過讀取/var/run/utmp和/或/var/log/utmp或執行runlevel命令查看當前運行級別。如果runlevel返回類似2 0(prevlevel運行級別),則表示系統正在嘗試從級別2切換到級別0,即要關閉。 這可能會讓您對當前的關機做出非常短的時間(但我認爲您不能阻止它)。

+0

捕獲SIGTERM似乎不是終止Gui應用程序的正確方法,因爲它似乎在DE停止後處理,並且在DE/XServer上停止我的應用程序只是崩潰。 – asaenko