我有一個python程序需要清理的東西,當shell退出意外,什麼樣的信號必須被捕獲?什麼樣的信號必須被捕獲當shell退出
回答
使用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
當我關閉終端時,似乎這兩個信號無法被捕獲,您可以通過寫入處理程序中的文件來嘗試,並且您將看到終止終端不會向該文件寫入任何內容。 – 2012-08-06 08:09:37
@ ZhenyuLi收聽SIGHUP。有關信號的概述,請參閱['man 7 signal'](http://unixhelp.ed.ac.uk/CGI/man-cgi?signal+7)。 – 2012-08-06 12:20:39
很好的答案,它確實有效...... – 2012-08-08 01:39:15
- 1. 退出信號未被PyQt捕獲
- 2. 爲什麼信號不會被捕獲?
- 3. 爲什麼我的程序中「必須被捕獲或被宣佈爲拋出」?
- 4. Elixir:試着捕獲退出信號
- 5. 爲什麼拋出或捕獲的類型必須來自System.Exception
- 6. 爲什麼星號必須先出現?
- 7. 必須退出HandlerThread?
- 8. 爲什麼subshell無法從父shell中捕獲信號?
- 9. 必須捕獲或聲明拋出
- 10. 未報告的異常UnknownHostException;必須被捕獲或被宣告爲被拋出
- 11. 數據報套接字「必須捕獲或聲明被拋出」
- 12. Java異常必須被捕獲或者聲明拋出
- 13. MousePressEvent捕獲信號不必要 - PyQt4
- 14. 我的shell必須解釋雙引號
- 15. 未報告的異常javax.script.ScriptException;必須被捕獲或宣佈被拋出
- 16. 爲什麼我得到一個錯誤「必須被捕獲或被宣佈爲拋出」?發現
- 17. 搖:信號是否有什麼必須重建
- 18. MySQL - 必須被捕獲或被宣佈引發
- 19. 未報告異常異常;必須被捕獲或宣佈被拋出?
- 20. java:未引發異常java.io.FileNotFoundException;必須被捕獲或被宣告爲拋出
- 21. 如何處理「異常;必須被捕獲或聲明被拋出」?
- 22. 當「return x」被允許時,爲什麼必須使用「this.x = x」?
- 23. 流星:必須通過options.email未被捕獲的錯誤
- 24. 未被捕獲的錯誤:Accounts.ui.config:`extraSignupFields`必須是數組
- 25. Golang捕獲信號
- 26. 錯誤:未報告的異常IllegalMoveException;必須被捕或被宣佈被拋出
- 27. 未報告的異常ClassNotFoundException;必須被捕獲或聲明爲拋出
- 28. 未報告的異常java.io.ioexception必須被捕獲或聲明爲拋出
- 29. 未報告的異常必須被捕獲或者聲明拋出
- 30. 未報告的異常SQLException;必須被捕獲或聲明爲拋出錯誤
那個shell是一個登錄shell嗎? – 2012-07-29 10:37:52
是的....問題有時,外殼連接將不穩定,這將關閉程序,但我必須做一些清理... – 2012-08-06 08:11:01
羅布的評論下他的答案是正確的,趕上'SIGHUP'應該工作在你的情況。 – 2012-08-06 17:01:25