python 訊號處理模組signal

2021-08-19 14:01:47 字數 2064 閱讀 6338

signal包負責在python程式內部處理訊號,典型的操作包括預設訊號處理函式,暫停並等待訊號,以及定時發出sigalrm等。要注意,signal包主要是針對unix平台(比如linux, mac os),而windows核心中由於對訊號機制的支援不充分

signal包定義了各個訊號名及其對應的整數,比如

signal.sigabort

signal.sighup

# 連線結束通話

signal.sigill

# 非法指令

signal.sigint

# 連線中斷

signal.sigkill

# 終止程序(此訊號不能**獲或忽略)

signal.sigquit

# 終端退出

signal.sigterm

# 終止

signal.sigalrm

# 超時警告

signal.sigcont

# 繼續執行暫停程序

import signal

print signal.sigalrm

# 輸出結果14

$ man 7 signal
1. signal.signal(signalnum, handler)

signal包的核心是使用signal.signal()函式來預設(register)訊號處理函式,如下所示:

singnal.signal(signalnum, handler)
signalnum為某個訊號,handler為該訊號的處理函式。我們在訊號基礎裡提到,程序可以無視訊號,可以採取預設操作,還可以自定義操作。當handler為signal.sig_ign時,訊號被無視(ignore)。當handler為singal.sig_dfl,程序採取預設操作(default)。當handler為乙個函式名時,程序採取函式中定義的操作

import signal

# define signal handler function

defmyhandler

(signum, frame):

print('i received: ', signum)

if __name__ == '__main__':

# register signal.sigtstp's handler

signal.signal(signal.sigtstp, myhandler)

signal.pause()

print('end of signal demo')

2. signal.alarm(time)

乙個有用的函式是signal.alarm(),它被用於在一定時間之後,向程序自身傳送sigalrm訊號:

import signal

# define signal handler function

defmyhandler

(signum, frame):

print("now, it's the time")

exit()

if __name__ == '__main__':

# register signal.sigalrm's handler

signal.signal(signal.sigalrm, myhandler)

signal.alarm(5)

while

true:

print('not yet')

3. os.kill

signal包的核心是設定訊號處理函式。除了signal.alarm()向自身傳送訊號之外,並沒有其他傳送訊號的功能。但在os包中,有類似於linux的kill命令的函式,分別為

os.kill(pid, sid)

os.killpg(pgid, sid)

分別向程序和程序組(見linux程序關係)傳送訊號。sid為訊號所對應的整數或者singal.sig*

參考文獻

Python 訊號處理 signal 模組

官方文件上有這樣的示例 import signal,os 定義乙個訊號處理函式,該函式列印收到的訊號,然後raise ioerror def handler signum,frame print signal handler called with signal signum raise ioerr...

Python訊號處理模組signal

python中對訊號處理的模組主要是使用signal模組,但signal主要是針對unix系統,所以在windows平台上python不能很好的發揮訊號處理的功能。要檢視python中的訊號量,可以使用dir signal 來檢視。在signal模組中,主要是使用signal.signal 函式來預...

linux程序間通訊方式之訊號處理signal

include include include include include include include include include include linux程序間通訊方式之訊號處理signal sighandler t signal int signum,sighandler t ha...