对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利用hook技术破解https的实例代码
Mar 25 Python
全面解析Python的While循环语句的使用方法
Oct 13 Python
详解Python的Lambda函数与排序
Oct 25 Python
Python中的__slots__示例详解
Jul 06 Python
python复制文件到指定目录的实例
Apr 27 Python
django框架之cookie/session的使用示例(小结)
Oct 15 Python
python 实现交换两个列表元素的位置示例
Jun 26 Python
用python给自己做一款小说阅读器过程详解
Jul 11 Python
python读取hdfs上的parquet文件方式
Jun 06 Python
python 字符串的驻留机制及优缺点
Jun 19 Python
sqlalchemy实现时间列自动更新教程
Sep 02 Python
详解appium自动化测试工具(monitor、uiautomatorviewer)
Jan 27 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
dedecms模板标签代码官方参考
2007/03/17 PHP
php 归并排序 数组交集
2011/05/10 PHP
php防止sql注入示例分析和几种常见攻击正则表达式
2014/01/12 PHP
PHP数据库操作之基于Mysqli的数据库操作类库
2014/04/19 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十四)
2014/06/26 PHP
学习ExtJS(一) 之基础前提
2009/10/07 Javascript
JavaScript 语言基础知识点总结(思维导图)
2013/11/10 Javascript
JavaScipt中栈的实现方法
2016/02/17 Javascript
js点击返回跳转到指定页面实现过程
2020/08/20 Javascript
实例讲解JavaScript中instanceof运算符的用法
2016/06/08 Javascript
深入剖析JavaScript面向对象编程
2016/07/12 Javascript
JavaScript中windows.open()、windows.close()方法详解
2016/07/28 Javascript
JS实现图片局部放大或缩小的方法
2016/08/20 Javascript
用Angular实时获取本地Localstorage数据,实现一个模拟后台数据登入的效果
2016/11/09 Javascript
Sublime Text新建.vue模板并高亮(图文教程)
2017/10/26 Javascript
layui框架中layer父子页面交互的方法分析
2017/11/15 Javascript
vue.js轮播图组件使用方法详解
2018/07/03 Javascript
微信小程序文字显示换行问题
2019/07/28 Javascript
Python多线程编程(二):启动线程的两种方法
2015/04/05 Python
python通过文件头判断文件类型
2015/10/30 Python
pyspark 读取csv文件创建DataFrame的两种方法
2018/06/07 Python
简单了解python PEP的一些知识
2019/07/13 Python
python基于socket进行端口转发实现后门隐藏的示例
2019/07/25 Python
解决python虚拟环境切换无效的问题
2020/04/30 Python
美国最大的宠物用品零售商:PetSmart
2016/11/14 全球购物
农田水利实习自我鉴定
2013/09/19 职场文书
理工科学生的自我评价
2013/12/15 职场文书
师范生的个人求职信范文
2014/01/04 职场文书
后勤主管岗位职责
2014/03/01 职场文书
软件工程毕业生自荐信
2014/07/04 职场文书
销售经理工作失职检讨书
2014/10/24 职场文书
小学老师对学生的评语
2014/12/29 职场文书
四年级语文教学反思
2016/03/03 职场文书
Golang 实现超大文件读取的两种方法
2021/04/27 Golang
详解CSS3.0(Cascading Style Sheet) 层叠级联样式表
2021/07/16 HTML / CSS
python利用while求100内的整数和方式
2021/11/07 Python