对Python信号处理模块signal详解


Posted in Python onJanuary 09, 2019

Python中对信号处理的模块主要是使用signal模块,但signal主要是针对Unix系统,所以在Windows平台上Python不能很好的发挥信号处理的功能。

要查看Python中的信号量,可以使用dir(signal)来查看。

signal.signal()

在signal模块中,主要是使用signal.signal()函数来预设信号处理函数

singnal.signal(signalnum, handler)

其中第一个参数是信号量,第二个参数信号处理函数。

下面看个简单的例子,其中

定义了一个信号处理函数signal_handler(),用来处理程序接收到信号时执行的操作

一段循环等待发送信号

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import signal
import time

def 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 <pid>
kill -2 <pid>
kill -3 <pid>
kill -14 <pid>
kill -15 <pid>
kill -18 <pid>
kill -9 <pid> # 最后杀死进程

此时可以看到test.py的输出,打印的就是具体接收到的信号。

这里注意一点就是程序中注册了SIGINT信号,所以在运行程序后使用CTRL+C并不能结束进程,而是仍然打印进程接收到的信号。

signal.alarm()

另外,signal模块提供了一个很有用的函数signal.alarm(),它用于在一定时间后向进程自身发送SIGALRM信号,比如下面的例子设置5秒后向自己发送一个SIGALRM信号。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import signal
import time

def 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详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python回调函数的使用方法
Jan 23 Python
python 通过xml获取测试节点和属性的实例
Mar 31 Python
python基础教程项目二之画幅好画
Apr 02 Python
python实现归并排序算法
Nov 22 Python
Python中的 enum 模块源码详析
Jan 09 Python
Django rest framework jwt的使用方法详解
Aug 08 Python
解决Python设置函数调用超时,进程卡住的问题
Aug 08 Python
原来我一直安装 Python 库的姿势都不对呀
Nov 11 Python
利用Python的turtle库绘制玫瑰教程
Nov 23 Python
python 实现两个npy档案合并
Jul 01 Python
python 对一幅灰度图像进行直方图均衡化
Oct 27 Python
详解Django中 render() 函数的使用方法
Apr 22 Python
使用python实现语音文件的特征提取方法
Jan 09 #Python
对python中Librosa的mfcc步骤详解
Jan 09 #Python
Python中的枚举类型示例介绍
Jan 09 #Python
利用python提取wav文件的mfcc方法
Jan 09 #Python
Python Matplotlib库安装与基本作图示例
Jan 09 #Python
对Python使用mfcc的两种方式详解
Jan 09 #Python
Python中的 enum 模块源码详析
Jan 09 #Python
You might like
浅析is_writable的php实现
2013/06/18 PHP
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
2013/06/24 PHP
解析zend Framework如何自动加载类
2013/06/28 PHP
PHP中filter函数校验数据的方法详解
2015/07/31 PHP
php版微信公众平台实现预约提交后发送email的方法
2016/09/26 PHP
PHP页面跳转实现延时跳转的方法
2016/12/10 PHP
总结AJAX相关JS代码片段和浏览器模型
2007/08/15 Javascript
javascript 自动填写表单的实现方法
2010/04/09 Javascript
jQuery find和children方法使用
2011/01/31 Javascript
jquery 年会抽奖程序
2011/12/22 Javascript
JS Pro-深入面向对象的程序设计之继承的详解
2013/05/07 Javascript
jquery实现控制表格行高亮实例
2013/06/05 Javascript
IE下写xml文件的两种方式(fso/saveAs)
2013/08/05 Javascript
document.getElementBy(&quot;id&quot;)与$(&quot;#id&quot;)有什么区别
2013/09/22 Javascript
jquery form表单序列化为对象的示例代码
2014/03/05 Javascript
详解Javascript中prototype属性(推荐)
2016/09/03 Javascript
Node.js中.pfx后缀文件的处理方法
2017/03/10 Javascript
JS原生带小白点轮播图实例讲解
2017/07/22 Javascript
微信小程序将字符串生成二维码图片的操作方法
2018/07/17 Javascript
IE9 elementUI文件上传的问题解决
2018/10/17 Javascript
webstorm+vue初始化项目的方法
2018/10/18 Javascript
小程序文字跑马灯效果
2018/12/28 Javascript
Vue传参一箩筐(页面、组件)
2019/04/04 Javascript
[47:04]EG vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
浅谈django开发者模式中的autoreload是如何实现的
2017/08/18 Python
python3利用Dlib19.7实现人脸68个特征点标定
2018/02/26 Python
python让列表倒序输出的实例
2018/06/25 Python
在pandas多重索引multiIndex中选定指定索引的行方法
2018/11/16 Python
Python文件如何引入?详解引入Python文件步骤
2018/12/10 Python
Python爬取新型冠状病毒“谣言”新闻进行数据分析
2020/02/16 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
2020/03/31 Python
英国床和浴室商场:Bed & Bath Emporium
2018/05/20 全球购物
“学雷锋活动月”总结
2014/03/09 职场文书
党建工作经验交流材料
2014/05/25 职场文书
2015中秋节晚会主持词
2015/07/01 职场文书
班级联欢会主持词
2015/07/03 职场文书