我有一個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. Elixir:試着捕獲退出信號
- 4. 爲什麼星號必須先出現?
- 5. 數據報套接字「必須捕獲或聲明被拋出」
- 6. Java異常必須被捕獲或者聲明拋出
- 7. 我的shell必須解釋雙引號
- 8. 未報告的異常javax.script.ScriptException;必須被捕獲或宣佈被拋出
- 9. java:未引發異常java.io.FileNotFoundException;必須被捕獲或被宣告爲拋出
- 10. 如何處理「異常;必須被捕獲或聲明被拋出」?
- 11. 流星:必須通過options.email未被捕獲的錯誤
- 12. 錯誤:未報告的異常IllegalMoveException;必須被捕或被宣佈被拋出
- 13. 未報告的異常ClassNotFoundException;必須被捕獲或聲明爲拋出
- 14. 未報告的異常SQLException;必須被捕獲或聲明爲拋出錯誤
- 15. finally {}中的捕獲異常?必須?
- 16. 當我的程序正常退出時,我應該期待什麼信號?
- 17. 在Elixir escript中捕獲出口信號
- 18. 傳播異常必須在Java中被捕獲?
- 19. 捕獲傳入的信號
- 20. 爲什麼信號量被獲取而未被創建?
- 21. C shell,父類捕獲的信號仍然進入子進程。
- 22. 什麼是可以在Tcl中捕獲的linux信號
- 23. 未報告的異常java.io.FileNotFoundException;必須被捕或宣佈被拋出6
- 24. 未報告的異常java.lang.ClassNotFoundException;必須捕獲或聲明拋出
- 25. 如果Swift'guard'語句必須退出範圍,範圍的定義是什麼?
- 26. 錯誤:未報告的異常java.io.IOException;必須被捕獲或被宣佈爲被拋出
- 27. 什麼是「信號異常退出9:已殺死:9」是指
- 28. 爲什麼我的異常被捕獲
- 29. 爲什麼我的ConstraintViolationException不被捕獲?
- 30. 在C++中捕獲shell腳本退出狀態
那個shell是一個登錄shell嗎? – 2012-07-29 10:37:52
是的....問題有時,外殼連接將不穩定,這將關閉程序,但我必須做一些清理... – 2012-08-06 08:11:01
羅布的評論下他的答案是正確的,趕上'SIGHUP'應該工作在你的情況。 – 2012-08-06 17:01:25