2012-07-29 90 views
1

我有一個python程序需要清理的東西,當shell退出意外,什麼樣的信號必須被捕獲?什麼樣的信號必須被捕獲當shell退出

+1

那個shell是一個登錄shell嗎? – 2012-07-29 10:37:52

+0

是的....問題有時,外殼連接將不穩定,這將關閉程序,但我必須做一些清理... – 2012-08-06 08:11:01

+0

羅布的評論下他的答案是正確的,趕上'SIGHUP'應該工作在你的情況。 – 2012-08-06 17:01:25

回答

2

使用signal模塊爲特定信號添加處理程序。例如SIGINT和SIGTERM:

import signal 
def handler(signum, frame): 
    print('Caught signal %d' % signum) 
    # Now do something (clean-up?) ... 
signal.signal(signal.SIGINT, handler) 
signal.signal(signal.SIGTERM, handler) 

input() # Example to keep the program running 
+0

當我關閉終端時,似乎這兩個信號無法被捕獲,您可以通過寫入處理程序中的文件來嘗試,並且您將看到終止終端不會向該文件寫入任何內容。 – 2012-08-06 08:09:37

+1

@ ZhenyuLi收聽SIGHUP。有關信號的概述,請參閱['man 7 signal'](http://unixhelp.ed.ac.uk/CGI/man-cgi?signal+7)。 – 2012-08-06 12:20:39

+0

很好的答案,它確實有效...... – 2012-08-08 01:39:15

相關問題