Python捕捉系統訊號

昀溪發表於2018-11-20
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import signal
import sys


"""
Python捕捉中斷,我們編寫程式有時候會用到死迴圈,在這種情況下我們可以透過Ctrl+C來進行終止,普通程式可以,但是
有時候我們在程式中會開啟很多資源,比如檔案控制程式碼,網路連線等,我們希望捕獲中斷然後處理一下這些資源對其進行釋放
然後再推出程式,這時候就需要用到訊號捕捉。

最簡單的就是使用 KeyboardInterrupt 死迴圈放在一個try語句裡面然後捕捉KeyboardInterrupt異常,
這種只能針對KeyboardInterrupt也就是按下Ctrl+c這種情況,如果相對其他情況則不行。
"""


# 訊號處理程式
def sigintHandler(signum, frame):
    print("中斷髮生。")
    # 需要最後做的事情
    print("執行最後的清理工作。")
    exit()


def main():
    # 訊號捕捉程式必須在迴圈之前設定
    signal.signal(signal.SIGINT, sigintHandler)   # 由Interrupt Key產生,通常是CTRL+C或者DELETE產生的中斷
    signal.signal(signal.SIGHUP, sigintHandler)   # 傳送給具有Terminal的Controlling Process,當terminal 被disconnect時候傳送
    signal.signal(signal.SIGTERM, sigintHandler)  # 請求中止程式,kill命令預設傳送
    print("Task started....")
    while True:
        pass


if __name__ == "__main__":
    try:
        main()
    finally:
        sys.exit()

 

相關文章