对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处理JSON时的值报错及编码报错的两则解决实录
Jun 26 Python
git进行版本控制心得详谈
Dec 10 Python
python爬虫自动创建文件夹的功能
Aug 01 Python
将python图片转为二进制文本的实例
Jan 24 Python
django-rest-framework 自定义swagger过程详解
Jul 18 Python
Django RBAC权限管理设计过程详解
Aug 06 Python
Python实现使用dir获取类的方法列表
Dec 24 Python
如何使用Python破解ZIP或RAR压缩文件密码
Jan 09 Python
Pytorch 实现focal_loss 多类别和二分类示例
Jan 14 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
Mar 09 Python
pandas读取csv文件提示不存在的解决方法及原因分析
Apr 21 Python
Python中使用aiohttp模拟服务器出现错误问题及解决方法
Oct 31 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修改Linux或Unix口令的方法分享
2012/01/30 PHP
PHP写的获取各搜索蜘蛛爬行记录代码
2012/08/21 PHP
ThinkPHP中处理表单中的注意事项
2014/11/22 PHP
Zend Framework教程之Application和Bootstrap用法详解
2016/03/10 PHP
封装好的省市地区联动控件附下载
2007/08/13 Javascript
jqgrid 表格数据导出实例
2013/11/21 Javascript
Jquery方式获取iframe页面中的 Dom元素
2014/05/07 Javascript
jQuery选择器源码解读(一):Sizzle方法
2015/03/31 Javascript
jQuery简单实现列表隐藏和显示效果示例
2016/09/12 Javascript
AngularJS实现ajax请求的方法
2016/11/22 Javascript
微信小程序 tabs选项卡效果的实现
2017/01/05 Javascript
Javascript基础回顾之(一) 类型
2017/01/31 Javascript
JS中使用正则表达式g模式和非g模式的区别
2017/04/01 Javascript
详解使用angular的HttpClient搭配rxjs
2017/09/01 Javascript
Redux 和 Mobx的选择问题:让你不再困惑!
2017/09/18 Javascript
jQuery实现DIV响应鼠标滑过由下向上展开效果示例【测试可用】
2018/04/26 jQuery
js实现窗口全屏示例详解
2019/09/17 Javascript
nodemon实现Typescript项目热更新的示例代码
2019/11/19 Javascript
[01:21:07]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
介绍Python中内置的itertools模块
2015/04/29 Python
Python中的index()方法使用教程
2015/05/18 Python
Python简单计算文件夹大小的方法
2015/07/14 Python
浅谈Python类的__getitem__和__setitem__特殊方法
2016/12/25 Python
python实现朴素贝叶斯算法
2018/11/19 Python
基于Python解密仿射密码
2019/10/21 Python
印尼值得信赖的在线交易网站:Bukalapak
2019/03/11 全球购物
什么是规则表达式
2012/05/03 面试题
市场营销毕业生自荐信
2013/11/23 职场文书
哈理工毕业生的求职信
2013/12/22 职场文书
销售行政专员职责
2014/01/03 职场文书
交通事故协议书
2014/04/15 职场文书
英文演讲稿
2014/05/15 职场文书
2014年科室工作总结
2014/11/20 职场文书
幼儿园教师自我评价
2015/03/04 职场文书
可可西里观后感
2015/06/08 职场文书
linux目录管理方法介绍
2022/06/01 Servers