对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实现登陆知乎获得个人收藏并保存为word文件
Mar 16 Python
在Python的gevent框架下执行异步的Solr查询的教程
Apr 16 Python
PYTHON基础-时间日期处理小结
May 05 Python
Python2.7.10以上pip更新及其他包的安装教程
Jun 12 Python
Python 多线程不加锁分块读取文件的方法
Dec 11 Python
浅谈python标准库--functools.partial
Mar 13 Python
Python2与Python3的区别实例总结
Apr 17 Python
python3实现猜数字游戏
Dec 07 Python
python执行scp命令拷贝文件及文件夹到远程主机的目录方法
Jul 08 Python
Django多进程滚动日志问题解决方案
Dec 17 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
Nov 05 Python
pytorch 实现多个Dataloader同时训练
May 29 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防注
2007/01/15 PHP
php继承中方法重载(覆盖)的应用场合
2015/02/09 PHP
php计算整个目录大小的方法
2015/06/01 PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
2015/12/23 PHP
PHP实现删除多重数组对象属性并重新赋值的方法
2017/06/07 PHP
鼠标滑上去后图片放大浮出效果的js代码
2011/05/28 Javascript
JS案例分享之金额小写转大写
2014/05/15 Javascript
AngularJS实现表单手动验证和表单自动验证
2015/12/09 Javascript
老生常谈原生JS执行环境与作用域
2016/11/22 Javascript
js 转义字符及URI编码详解
2017/02/28 Javascript
详解webpack自动生成html页面
2017/06/29 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
2018/02/03 Javascript
图文介绍Vue父组件向子组件传值
2018/02/17 Javascript
Vue 应用中结合vux使用微信 jssdk的方法
2018/08/28 Javascript
微信小程序select下拉框实现源码
2019/11/08 Javascript
Vue使用vue-draggable 插件在不同列表之间拖拽功能
2020/03/12 Javascript
简单了解JavaScript弹窗实现代码
2020/05/07 Javascript
浅谈Pandas中map, applymap and apply的区别
2018/04/10 Python
pandas DataFrame创建方法的方式
2019/08/02 Python
手机使用python操作图片文件(pydroid3)过程详解
2019/09/25 Python
python with (as)语句实例详解
2020/02/04 Python
Python实现对word文档添加密码去除密码的示例代码
2020/12/29 Python
详解CSS3原生支持div铺满浏览器的方法
2018/08/30 HTML / CSS
英国安全产品购物网站:The Safe Shop
2017/03/20 全球购物
Theflamel意大利:女士奢华服装、鞋子和配件
2020/01/11 全球购物
如果让你测试一台高速激光打印机,你都会进行哪些测试
2012/12/04 面试题
浙江文明网签名寄语
2014/01/18 职场文书
关爱老人标语
2014/06/21 职场文书
视光学专业自荐信
2014/06/24 职场文书
行政求职信
2014/07/04 职场文书
送温暖献爱心活动总结
2014/07/08 职场文书
活动经费申请报告
2015/05/15 职场文书
2015年团委副书记工作总结
2015/07/23 职场文书
感恩教师主题班会
2015/08/12 职场文书
Windows 11要来了?微软文档揭示Win11太阳谷 / Win10有两个不同版本
2021/11/21 数码科技
Win11 Build 25179预览版发布(附更新内容+ISO官方镜像下载)
2022/08/14 数码科技