Signal:python用信号处理程序的机制及用法举例
1.Signal模块简介
提供了在 Python 中使用信号处理程序的机制
2.signal.signal()
signal.signal(signalnum, handler):
- signalnum:信号量,具体参看python文档
- handler:信号处理程序,可以是自定义的函数,也可以是特殊值 signal.SIG_IGN、 signal.SIG_DFL之一
注意:signal.signal()只能在主线程中调用,在从属线程中调用会报错
3.一般规则
- signal.signal() 函数允许定义在接收到信号时执行的自定义处理程序(自写API)
- 少量默认处理程序:
2.1 信号量SIGPIPE:忽略默认的SIGPIPE处理函数(SIGPIPE默认处理为管道/套接字出错时终止进程,这里将其忽略),因此管道和套接字上的写错误可以像普通的 Python 异常一样报告
2.2信号量 SIGINT:转换为 KeyboardInterrupt 异常(一般为ctrl+c引发的中断)。
注意:默认处理程序是可覆盖的,当为特殊信号量绑定自定义处理程序时,即覆盖其原来的默认操作
4.使用举例
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import signal
import timedef signal_handler(signum, frame):print('Received signal: ', signum)while True:signal.signal(signal.SIGHUP, signal_handler) # 1signal.signal(signal.SIGINT, signal_handler) # 2signal.signal(signal.SIGQUIT, signal_handler) # 3signal.signal(signal.SIGALRM, signal_handler) # 14signal.signal(signal.SIGTERM, signal_handler) # 15signal.signal(signal.SIGCONT, signal_handler) # 18while True:print('waiting')time.sleep(1)
执行上述代码
python3 siganl.py
另起终端:
1.查找“python3 siganl.py ”进程id
执行
kill -1 <pid>
kill -3 <pid>
#此处pid为16466
给“python3 signal”进程传信号,该进程会调用进程处理程序返回信号值:
最后可传信号值9终止进程
kill -9 <pid>
5.巧用signal模块解决while true死循环
前段时间做相机实时识别,需要使用while true 来持续读入数据流,且代码中有一系列判定条件,在调试过程中一旦我在程序结束前需要关掉程序,只能使用kill -9来杀死这个进程,ctrl+c无效
signal模块就轻松解决我的问题
首先:
ctrl+c会向主线程传递SIGINT信号(中断)
若有其他线程则再次ctrl+c会给下一个线程发送SIGINT信号
使用(举例):
自定义信号处理函数:
def quit(signum, frame):print 'i have stopped'sys.exit()
在while true前添加:
signal.signal(signal.SIGINT, quit)
# SIGINT关联ctrl+c
signal.SIGINT是默认转为转换为 KeyboardInterrupt 异常的,这里相当于对其默认处理的覆盖,用自定义quit()函数来替代引发的KeyboardInterrupt 异常。
Signal:python用信号处理程序的机制及用法举例相关推荐
- linux调用信号处理程序后返回,如何在Linux上执行异步信号处理程序?
Source#1(Andries Brouwer)对于单线程进程是正确的 . 源#2(SCO Unix)对于Linux是错误的,因为Linux不喜欢sigwait中的线程(2) . 关于第一个可用的线 ...
- python进程间通信--信号Signal
信号signal 是python进程间通信多种机制中的其中一种机制.可以对操作系统进程的控制,当进程中发生某种原因而中断时,可以异步处理这个异常. 信号通过注册的方式'挂'在一个进程中,并且不会阻塞该 ...
- python在信号处理的应用_Python和信号处理程序
我需要一些关于python中的信号处理程序的澄清,因为我不确切地理解它们是如何工作的.如何使用它们以及有哪些限制.在 我打算在linux上使用USR信号,以便与作为服务在后台运行的python程序通信 ...
- 雷达信号处理程序源码 python 需达围像识别 雷达系统仿真代码源码 matlab SAR 雷达系统仿真程序集合 雷达压制干扰matlab程序 线性调联(IFM)脉冲压缩雷达伤真
雷达信号处理程序源码 雷达系统仿真代码源码 matlab SAR 1.MAITOFPR 探地雷达数据处理MMITLAB程序 2.python 需达围像识别 3.SAR团达回波仿真matlab 4.SA ...
- 深入对比数据科学工具箱:Python和R的异常处理机制
概述 异常处理,是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中出现的异常状况(即超出程序正常执行流程的某些特殊条件).Python和R作为一门编程语言自然也是有各自的异常处理机制的,异常 ...
- QT 基础知识一(QT安装、创建项目、常用窗口控件使用、信号与槽机制讲解)
QT概念 Qt:Qt是一个跨平台的C++框架(C++库),Qt除了支持界面设计(GUI编程),还封装了与网络编程.多线程.数据库连接.视频音频等相关的功能. ctrl 撤销(返回上一步) 市面常见的G ...
- PyQt5(五)信号与槽机制
信号和槽机制是 QT 的核心机制,要精通 QT 编程就必须对信号和槽有所了解.信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包的重要地方. 信号和槽是 ...
- QT 的信号与槽机制介绍
QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 QT ...
- qt学习之路3 ---信号与槽机制
信号和槽机制 1.概述 Qt采用了一种全新的对象和方法的关联与通信机制,称为信号和槽机制.信号和槽机制是独立于标准C++编译器的,在编译之前需要经过Qt的专门预处理工具MOC(Meta Object ...
最新文章
- Tomcat关闭日志catalina.out
- The RSpec Book笔记《一》初步认识TDD,BDD,RSpec,Cucumber
- 淘宝文件系统文件映射原理及实现
- 面向程序员的数据挖掘指南: 第二章 从推荐系统开始
- 过滤器跟拦截器的区别
- Python的运算符和编码
- apache.camel_Apache Camel 3.1 –更多骆驼核心优化(第3部分)
- winshark重要数据结构
- 从golang-gin-realworld-example-app项目学写httpapi (四)
- 高通宣布与蔚来合作下一代数字座舱技术
- C++程序代码:类实现——【calculator】计算器程序设计
- DCIM有助于数据中心的UPS部署
- java 十六进制数的转换
- 链接了dpdk的进程启动core在 Illegal instruction
- linux开发板命令rx,linux 常用命令汇总
- 在计算机操作中粘贴的快捷键是什么,电脑复制粘贴的快捷键是什么
- 西南大学计算机学院导师,西南大学计算机与信息科学学院研究生导师简介-胡小方...
- Xftp5 安装教程
- 用python制作英文字典的分析_分享一个自己做的英文科学写作检查器
- Android RadioGroup中横向 竖向布局RadioButton的问题
热门文章
- 元宇宙|世界人工智能大会之元宇宙论坛:设计篇
- 海关外贸企业大数据风控平台产品应用
- iperf测试工具使用方法
- 数据清洗(一)-----------重复数据处理
- 面试时Dubbo原理记不住?来看看《Dubbo原理浅析——从RPC本质看Dubbo》
- 【数据挖掘】1、综述:背景、数据的特征、数据挖掘的六大应用方向、有趣的案例
- 半导体TEC高低温实验设备-温控仪|固体温度控制、实验、科研
- 表格td的宽度不随内容自适应
- 科学论文类型分类(letter, perspective, focus, article)以及影响引子,SCI、EI等
- 15米 GMSLFPDLink传输线束降速问题