对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实现猜数字游戏(无重复数字)示例分享
Mar 29 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
Oct 01 Python
Python set常用操作函数集锦
Nov 15 Python
win7下python3.6安装配置方法图文教程
Jul 31 Python
Python中安装easy_install的方法
Nov 18 Python
200行python代码实现2048游戏
Jul 17 Python
面向对象学习之pygame坦克大战
Sep 11 Python
带你彻底搞懂python操作mysql数据库(cursor游标讲解)
Jan 06 Python
pytorch 模型的train模式与eval模式实例
Feb 20 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
Apr 16 Python
Python爬虫进阶之爬取某视频并下载的实现
Dec 08 Python
PyCharm 光标变成黑块的解决方式
Feb 06 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
提升PHP执行速度全攻略(下)
2006/10/09 PHP
封装一个PDO数据库操作类代码
2009/09/09 PHP
使用PHP把HTML生成PDF文件的几个开源项目介绍
2014/11/17 PHP
PHP使用PDO操作数据库的乱码问题解决方法
2016/04/08 PHP
php字符串操作常见问题小结
2016/10/11 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
JavaScript 提升运行速度之循环篇 译文
2009/08/15 Javascript
查询绑定数据岛的表格中的文本并修改显示方式的js代码
2009/12/15 Javascript
ExtJs事件机制基本代码模型和流程解析
2010/10/24 Javascript
jQuery LigerUI 插件介绍及使用之ligerDrag和ligerResizable示例代码打包
2011/04/06 Javascript
js特殊字符转义介绍
2013/11/05 Javascript
jquery实现页面百叶窗走马灯式翻滚显示效果的方法
2015/03/12 Javascript
基于JavaScript实现动态添加删除表格的行
2016/02/01 Javascript
jQuery监听文件上传实现进度条效果的方法
2016/10/16 Javascript
使用vue.js实现联动效果的示例代码
2017/01/10 Javascript
angular2+node.js express打包部署的实战
2017/07/27 Javascript
浅谈JS函数节流防抖
2017/10/18 Javascript
JS开发 富文本编辑器TinyMCE详解
2019/07/19 Javascript
使用layui监听器监听select下拉框,事件绑定不成功的解决方法
2019/09/28 Javascript
Ant Design的Table组件去除
2020/10/24 Javascript
python实现定时同步本机与北京时间的方法
2015/03/24 Python
python模拟enum枚举类型的方法小结
2015/04/30 Python
Python实现命令行通讯录实例教程
2016/08/18 Python
python实现简易版计算器
2020/06/22 Python
pycharm通过ssh连接远程服务器教程
2020/02/12 Python
python logging 日志的级别调整方式
2020/02/21 Python
CSS3 border-image详解、应用及jQuery插件
2011/08/29 HTML / CSS
The Hut德国站点:时装、家居用品、美容等
2016/09/23 全球购物
Flesh Beauty官网:露华浓集团旗下彩妆品牌
2021/02/15 全球购物
活动邀请函范文
2014/01/19 职场文书
运动会入场解说词
2014/02/07 职场文书
应聘教师求职信范文
2015/03/20 职场文书
2015年会计工作总结范文
2015/05/26 职场文书
导游词之无锡东林书院
2019/12/11 职场文书
微信小程序 WeUI扩展组件库的入门教程
2022/04/21 Javascript
python使用BeautifulSoup 解析HTML
2022/04/24 Python