標籤:top href 覆蓋 port pytho AC 學習python 標準 body
基於python學習筆記——多處理序間通訊——Linux訊號基礎的學習基礎,進一步學習Python標準庫中的signal模組。
儘管signal是python中的模組,但是主要針對UNIX平台(比如Linux,MAC OS),而Windows核心中由於對訊號機制的支援不充分,所以在Windows上的Python不能發揮訊號系統的功能。
signal模組負責python程式內部的訊號處理;典型的操作包括訊號處理函數、暫停並等待訊號,以及定時發出SIGALRM等;
1 signal基本訊號名
引入模組: import signal
signal.SIGHUP # 串連掛斷;signal.SIGILL # 非法指令;signal.SIGINT # 終止進程(ctrl+c);signal.SIGTSTP # 暫停進程(ctrl+z);signal.SIGKILL # 殺死進程(此訊號不能被捕獲或忽略);signal.SIGQUIT # 終端退出;signal.SIGTERM # 終止訊號,軟體終止訊號;signal.SIGALRM # 鬧鐘訊號,由signal.alarm()發起;signal.SIGCONT # 繼續執行暫停進程;
2 常用訊號處理函數2.1
設定發送SIGALRM訊號的定時器
signal.alarm(time)
參數:time為時間參數
功能:在time時間後,向進程自身發送SIGALRM訊號
import signalimport timesignal.alarm(4)#4s後終止程式while True: time.sleep(1) print("學習python中...")
運行
學習python中...學習python中...學習python中...鬧鐘
當在一個程式中出現兩個signal.alarm()函數時
import signalimport timeprint(signal.alarm(3)) # 0time.sleep(1)print(signal.alarm(4)) # 2while True: time.sleep(1) print("學習python中...")
運行
02學習python中...學習python中...學習python中...鬧鐘
注意:在一個進程中,只能設定一個時鐘,如果設定第二個則會覆蓋第一個的時間,返回地一個的剩餘時間,第一個鬧鐘返回0。
2.1 設定訊號處理函數
signal.signal(sig, handler)
功能:按照handler制定的訊號處理方案處理函數
參數:
sig:擬需處理的訊號,處理訊號只針對這一種訊號起作用sig
hander:訊號處理方案
在訊號基礎裡提到,進程可以無視訊號、可採取預設操作、還可自訂動作;當handler為下列函數時,將有如下操作:
SIG_IGN:訊號被無視(ignore)或忽略
SIG_DFL:進程採用預設(default)行為處理
function:handler為一個函數名時,進程採用自訂函數處理
*SIGSTOP SIGKILL不能處理,只能採用
python學習筆記——訊號模組signal