Python訊號處理模組signal

2021-09-19 16:54:44 字數 3391 閱讀 1759

python中對訊號處理的模組主要是使用signal模組,但signal主要是針對unix系統,所以在windows平台上python不能很好的發揮訊號處理的功能。

要檢視python中的訊號量,可以使用dir(signal)來檢視。

在signal模組中,主要是使用signal.signal()函式來預設訊號處理函式

singnal.signal(signalnum, handler)
其中第乙個引數是訊號量,第二個引數訊號處理函式。

下面看個簡單的例子,其中

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import signalimport timedef

signal_handler

(signum, frame):    print('received signal: ', signum)while

true:    signal.signal(signal.sighup, signal_handler) # 1    signal.signal(signal.sigint, signal_handler) # 2    signal.signal(signal.sigquit, signal_handler) # 3    signal.signal(signal.sigalrm, signal_handler) # 14    signal.signal(signal.sigterm, signal_handler) # 15    signal.signal(signal.sigcont, signal_handler) # 18

while

true:        print('waiting')        time.sleep(1)

執行上面的程式

python test.py
然後另外開乙個終端,找到對應的程序,並執行下面的kill操作

kill -1

kill -2

kill -3

kill -14

kill -15

kill -18

kill -9

# 最後殺死程序

此時可以看到test.py的輸出,列印的就是具體接收到的訊號。

這裡注意一點就是程式中註冊了sigint訊號,所以在執行程式後使用ctrl+c並不能結束程序,而是仍然列印程序接收到的訊號。

另外,signal模組提供了乙個很有用的函式signal.alarm(),它用於在一定時間後向程序自身傳送sigalrm訊號,比如下面的例子設定5秒後向自己傳送乙個sigalrm訊號。

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import signalimport timedef

signal_handler

(signum, frame):    print('received signal: ', signum)while

true:    signal.signal(signal.sigalrm, signal_handler) # 14    signal.alarm(5)    while

true:        print('waiting')        time.sleep(1)

python中對訊號處理的模組主要是使用signal模組,但signal主要是針對unix系統,所以在windows平台上python不能很好的發揮訊號處理的功能。

要檢視python中的訊號量,可以使用dir(signal)來檢視。

在signal模組中,主要是使用signal.signal()函式來預設訊號處理函式

singnal.signal(signalnum, handler)
其中第乙個引數是訊號量,第二個引數訊號處理函式。

下面看個簡單的例子,其中

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import signalimport timedef

signal_handler

(signum, frame):    print('received signal: ', signum)while

true:    signal.signal(signal.sighup, signal_handler) # 1    signal.signal(signal.sigint, signal_handler) # 2    signal.signal(signal.sigquit, signal_handler) # 3    signal.signal(signal.sigalrm, signal_handler) # 14    signal.signal(signal.sigterm, signal_handler) # 15    signal.signal(signal.sigcont, signal_handler) # 18

while

true:        print('waiting')        time.sleep(1)

執行上面的程式

python test.py
然後另外開乙個終端,找到對應的程序,並執行下面的kill操作

kill -1

kill -2

kill -3

kill -14

kill -15

kill -18

kill -9

# 最後殺死程序

此時可以看到test.py的輸出,列印的就是具體接收到的訊號。

這裡注意一點就是程式中註冊了sigint訊號,所以在執行程式後使用ctrl+c並不能結束程序,而是仍然列印程序接收到的訊號。

另外,signal模組提供了乙個很有用的函式signal.alarm(),它用於在一定時間後向程序自身傳送sigalrm訊號,比如下面的例子設定5秒後向自己傳送乙個sigalrm訊號。

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import signalimport timedef

signal_handler

(signum, frame):    print('received signal: ', signum)while

true:    signal.signal(signal.sigalrm, signal_handler) # 14    signal.alarm(5)    while

true:        print('waiting')        time.sleep(1)

python 訊號處理模組signal

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

Python 訊號處理 signal 模組

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

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

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