对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 专题九 Mysql数据库编程基础知识
Mar 16 Python
在python中bool函数的取值方法
Nov 01 Python
python 构造三维全零数组的方法
Nov 12 Python
python实现在遍历列表时,直接对dict元素增加字段的方法
Jan 15 Python
深入理解Python异常处理的哲学
Feb 01 Python
python基础梳理(一)(推荐)
Apr 06 Python
python制作图片缩略图
Apr 30 Python
Pandas删除数据的几种情况(小结)
Jun 21 Python
PowerBI和Python关于数据分析的对比
Jul 11 Python
python 实现二维字典的键值合并等函数
Dec 06 Python
python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】
Apr 26 Python
Python实现Excel自动分组合并单元格
Feb 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
一些需要禁用的PHP危险函数(disable_functions)
2012/02/23 PHP
PHP常用函数和常见疑难问题解答
2014/03/05 PHP
PHP中使用smarty生成静态文件的例子
2014/04/24 PHP
php实现的Captcha验证码类实例
2014/09/22 PHP
简单的php+mysql聊天室实现方法(附源码)
2016/01/05 PHP
javascript Event对象详解及使用示例
2013/11/22 Javascript
javaScript对文字按照拼音排序实现代码
2013/12/27 Javascript
jquery操作复选框(checkbox)的12个小技巧总结
2014/02/04 Javascript
js实现touch移动触屏滑动事件
2015/04/17 Javascript
JS简单循环遍历json数组的方法
2016/04/22 Javascript
JS遍历页面所有对象属性及实现方法
2016/08/01 Javascript
bootstrap Table插件使用demo
2017/08/07 Javascript
VSCode配置react开发环境的步骤
2017/12/27 Javascript
jQuery实现的监听导航滚动置顶状态功能示例
2018/07/23 jQuery
Python实现字符串匹配算法代码示例
2017/12/05 Python
Python排序算法之选择排序定义与用法示例
2018/04/29 Python
python五子棋游戏的设计与实现
2019/06/18 Python
Python 实现遥感影像波段组合的示例代码
2019/08/04 Python
python网络爬虫 Scrapy中selenium用法详解
2019/09/28 Python
Python+Redis实现布隆过滤器
2019/12/08 Python
Python-for循环的内部机制
2020/06/12 Python
python基本算法之实现归并排序(Merge sort)
2020/09/01 Python
JackJones官方旗舰店:杰克琼斯男装
2018/03/27 全球购物
经贸日语专业个人求职信范文
2013/12/28 职场文书
手机促销活动方案
2014/02/05 职场文书
上课玩手机检讨书
2014/02/08 职场文书
小松树教学反思
2014/02/11 职场文书
房地产项目建议书
2014/03/12 职场文书
公司授权委托书范本
2014/04/03 职场文书
党的群众路线教育实践活动总结材料
2014/10/30 职场文书
酒店前台岗位职责
2015/04/16 职场文书
2016小学教师读书心得体会
2016/01/13 职场文书
python爬虫请求库httpx和parsel解析库的使用测评
2021/05/10 Python
为什么MySQL 删除表数据 磁盘空间还一直被占用
2021/10/16 MySQL
《异世界四重奏》剧场版6月10日上映 PV视觉图原创角色发表
2022/03/20 日漫
Elasticsearch 基本查询和组合查询
2022/04/19 Python