对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 05 Python
Python开发常用的一些开源Package分享
Feb 14 Python
在Python的Flask框架中实现全文搜索功能
Apr 20 Python
Python实现简单http服务器
Apr 12 Python
python获取程序执行文件路径的方法(推荐)
Apr 26 Python
Python读取excel中的图片完美解决方法
Jul 27 Python
利用Python检测URL状态
Jul 31 Python
Python实现bilibili时间长度查询的示例代码
Jan 14 Python
使用python实现下载我们想听的歌曲,速度超快
Jul 09 Python
利用django创建一个简易的博客网站的示例
Sep 29 Python
python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解
Dec 22 Python
python中pickle模块浅析
Dec 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中Array2xml类实现数组转化成XML实例
2014/12/08 PHP
PHP反射API示例分享
2016/10/08 PHP
PHP 实现浏览记录并按日期分组
2017/05/11 PHP
tp5框架内使用tp3.2分页的方法分析
2019/05/05 PHP
tp5.0框架隐藏index.php入口文件及模块和控制器的方法分析
2020/02/11 PHP
php 的多进程操作实践案例分析
2020/02/28 PHP
JavaScript中也使用$美元符号来代替document.getElementById
2010/06/19 Javascript
从数组中随机取x条不重复数据的JS代码
2013/12/24 Javascript
利用JQuery和Servlet实现跨域提交请求示例分享
2014/02/12 Javascript
浅谈jquery中的each方法$.each、this.each、$.fn.each
2016/06/23 Javascript
Bootstrap 网格系统布局详解
2017/03/19 Javascript
10个经典的网页鼠标特效代码
2018/01/09 Javascript
jQuery实现文件编码成base64并通过AJAX上传的方法
2018/04/12 jQuery
Angular8路由守卫原理和使用方法
2019/08/29 Javascript
解决layui使用layui-icon出现默认图标的问题
2019/09/11 Javascript
解决Nuxt使用axios跨域问题
2020/07/06 Javascript
vue 解决IOS10低版本白屏的问题
2020/11/17 Javascript
[45:50]完美世界DOTA2联赛PWL S3 CPG vs Forest 第二场 12.16
2020/12/17 DOTA
Python实现PS滤镜功能之波浪特效示例
2018/01/26 Python
详解Python核心对象类型字符串
2018/02/11 Python
python版opencv摄像头人脸实时检测方法
2018/08/03 Python
基于Python的Post请求数据爬取的方法详解
2019/06/14 Python
python常用数据重复项处理方法
2019/11/22 Python
Python写捕鱼达人的游戏实现
2020/03/31 Python
python3 中使用urllib问题以及urllib详解
2020/08/03 Python
python中的split、rsplit、splitlines用法说明
2020/10/23 Python
美国狗旅行和户外用品领先供应商:kurgo
2020/08/18 全球购物
JDK安装目录下有哪些内容
2014/08/25 面试题
vue 中 get / delete 传递数组参数方法
2021/03/23 Vue.js
本科毕业生求职自荐信
2014/04/09 职场文书
2014年秋季开学典礼致辞
2014/08/02 职场文书
离婚协议书范本及离婚须知
2014/10/15 职场文书
党的群众路线教育实践活动制度建设计划方案
2014/10/31 职场文书
营业用房租赁协议书
2014/11/26 职场文书
jdbc使用PreparedStatement批量插入数据的方法
2021/04/27 MySQL
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL