2011-06-01 59 views
1

關於如何捕獲關閉我的程序正在運行的終端窗口的任何想法? 雖然我在這裏,任何方式來捕獲當計算機關閉,但程序仍在運行,或者如果用戶註銷?C如何捕獲關閉終端

+1

哪些操作系統? – 2011-06-01 21:37:30

+0

如果電源立即切斷,該怎麼辦?是否需要立即清理,還是有可能在下一次開始清理時清理? – 2011-06-01 21:40:31

+0

@Neil:Linux,@Roland電源切斷可以看作是一種特殊情況,所以我不能處理那個 – user657178 2011-06-02 13:16:41

回答

2

嘗試捕捉SIGTERM。請注意,您無法捕獲SIGKILL,這可能是一段時間後關機期間發生的情況。我發現這個really nice post也解釋了一些差異。

[更新]在這裏的長處,但測試如果std-in/out仍然是開放和良好的呢?當終端死掉時,應該放棄這些文件描述符。免責聲明,這是最好的猜測。

+0

就像我說的,我試着測試捕獲所有的各種信號。 SIGTERM我geuss會爲Shutdown工作,還沒有測試過,但它肯定不會結束終端...任何想法? – user657178 2011-06-02 13:17:51

+0

也許你的程序在控制檯沒有被真正殺死的時候。你應該能夠驗證,但無論哪種方式嘗試測試標準輸入/標準輸出,看他們是否仍然「活着」。這是我得到的最好的。 – 2011-06-05 23:07:15

2

如果在Unix/Linux上:你看看SIGTERM嗎?這至少是關機期間發送給您的。

+0

SIGTERM可能會用於關機,我還沒有測試......但它絕對不能用於關閉終端,這對我來說現在更重要......任何想法? – user657178 2011-06-02 13:18:48

2

你可以試試atexit()函數嗎?(見註釋)

或者看看這個帖子在這裏:Signals received by bash when terminal is closed

+1

atexit僅用於正常的程序終止,它被定義爲「通過調用exit()或從main()返回」 – 2011-06-01 21:42:03

+0

我的不好,你是完全正確的。 – Gui13 2011-06-01 21:45:23

1

從我的測試......,關閉終端時,我的程序接收到信號是1或SIGHUP

+0

說SIGTERM錯誤的答案。 SIGHUP是終端關閉時發送的信號。 – 2016-04-26 12:34:04