对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实现的数据结构与算法之基本搜索详解
Apr 22 Python
python采用django框架实现支付宝即时到帐接口
May 17 Python
Python矩阵常见运算操作实例总结
Sep 29 Python
Python实现将通信达.day文件读取为DataFrame
Dec 22 Python
python引用(import)某个模块提示没找到对应模块的解决方法
Jan 19 Python
在keras中获取某一层上的feature map实例
Jan 24 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
Feb 18 Python
python实现打砖块游戏
Feb 25 Python
python爬虫开发之urllib模块详细使用方法与实例全解
Mar 09 Python
浅谈Python 中的复数问题
May 19 Python
JAVA SpringMVC实现自定义拦截器
Mar 16 Python
Python Pytorch查询图像的特征从集合或数据库中查找图像
Apr 09 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
C/S和B/S两种架构区别与优缺点分析
2014/10/23 PHP
MySql数据库查询结果用表格输出PHP代码示例
2015/03/20 PHP
PHP信号量基本用法实例详解
2016/02/12 PHP
深入理解PHP类的自动载入机制
2016/09/16 PHP
PHP实现百度人脸识别
2019/05/06 PHP
javascript 无提示关闭窗口脚本
2009/08/17 Javascript
javascript使用activex控件的代码
2011/01/27 Javascript
JavaScript 图像动画的小demo
2012/05/23 Javascript
JavaScript获取XML数据附示例截图
2014/03/05 Javascript
javascript模拟实现ajax加载框实例
2014/10/15 Javascript
jQuery使用height()获取高度需要注意的地方
2014/12/13 Javascript
浅谈Nodejs应用主文件index.js
2016/08/28 NodeJs
ES6新特性五:Set与Map的数据结构实例分析
2017/04/21 Javascript
jQuery实现的页面遮罩层功能示例【测试可用】
2017/10/14 jQuery
js解决软键盘遮挡输入框的问题分享
2017/12/19 Javascript
javascript for循环性能测试示例
2019/08/07 Javascript
vue 集成jTopo 处理方法
2019/08/07 Javascript
vue仿ios列表左划删除
2019/09/26 Javascript
vue elementui 实现搜索栏公共组件封装的实例代码
2020/01/20 Javascript
vue实现购物车的小练习
2020/12/21 Vue.js
[48:48]完美世界DOTA2联赛PWL S3 Magama vs GXR 第一场 12.19
2020/12/24 DOTA
python写日志封装类实例
2015/06/28 Python
零基础使用Python读写处理Excel表格的方法
2019/05/02 Python
详解python常用命令行选项与环境变量
2020/02/20 Python
Python基于requests库爬取网站信息
2020/03/02 Python
Tensorflow tf.tile()的用法实例分析
2020/05/22 Python
如何解决pycharm调试报错的问题
2020/08/06 Python
Skyscanner波兰:廉价航班
2017/11/07 全球购物
致400米运动员广播稿
2014/02/07 职场文书
大学生助学金感谢信
2015/01/21 职场文书
2015年母亲节活动总结
2015/02/10 职场文书
2015年信访维稳工作总结
2015/04/07 职场文书
学习雷锋主题班会
2015/08/14 职场文书
经典人生语录分享:不畏将来,不念过去,笑对当下
2019/12/12 职场文书
docker compose 部署 golang 的 Athens 私有代理问题
2022/04/28 Servers
python中validators库的使用方法详解
2022/09/23 Python