1.Signal模块简介

提供了在 Python 中使用信号处理程序的机制

2.signal.signal()

signal.signal(signalnum, handler):

  • signalnum:信号量,具体参看python文档
  • handler:信号处理程序,可以是自定义的函数,也可以是特殊值 signal.SIG_IGN、 signal.SIG_DFL之一

注意:signal.signal()只能在主线程中调用,在从属线程中调用会报错

3.一般规则

  1. signal.signal() 函数允许定义在接收到信号时执行的自定义处理程序(自写API)
  2. 少量默认处理程序
    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用信号处理程序的机制及用法举例相关推荐

  1. linux调用信号处理程序后返回,如何在Linux上执行异步信号处理程序?

    Source#1(Andries Brouwer)对于单线程进程是正确的 . 源#2(SCO Unix)对于Linux是错误的,因为Linux不喜欢sigwait中的线程(2) . 关于第一个可用的线 ...

  2. python进程间通信--信号Signal

    信号signal 是python进程间通信多种机制中的其中一种机制.可以对操作系统进程的控制,当进程中发生某种原因而中断时,可以异步处理这个异常. 信号通过注册的方式'挂'在一个进程中,并且不会阻塞该 ...

  3. python在信号处理的应用_Python和信号处理程序

    我需要一些关于python中的信号处理程序的澄清,因为我不确切地理解它们是如何工作的.如何使用它们以及有哪些限制.在 我打算在linux上使用USR信号,以便与作为服务在后台运行的python程序通信 ...

  4. 雷达信号处理程序源码 python 需达围像识别 雷达系统仿真代码源码 matlab SAR 雷达系统仿真程序集合 雷达压制干扰matlab程序 线性调联(IFM)脉冲压缩雷达伤真

    雷达信号处理程序源码 雷达系统仿真代码源码 matlab SAR 1.MAITOFPR 探地雷达数据处理MMITLAB程序 2.python 需达围像识别 3.SAR团达回波仿真matlab 4.SA ...

  5. 深入对比数据科学工具箱:Python和R的异常处理机制

    概述 异常处理,是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中出现的异常状况(即超出程序正常执行流程的某些特殊条件).Python和R作为一门编程语言自然也是有各自的异常处理机制的,异常 ...

  6. QT 基础知识一(QT安装、创建项目、常用窗口控件使用、信号与槽机制讲解)

    QT概念 Qt:Qt是一个跨平台的C++框架(C++库),Qt除了支持界面设计(GUI编程),还封装了与网络编程.多线程.数据库连接.视频音频等相关的功能. ctrl 撤销(返回上一步) 市面常见的G ...

  7. PyQt5(五)信号与槽机制

    信号和槽机制是 QT 的核心机制,要精通 QT 编程就必须对信号和槽有所了解.信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包的重要地方. 信号和槽是 ...

  8. QT 的信号与槽机制介绍

    QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 QT ...

  9. qt学习之路3 ---信号与槽机制

    信号和槽机制 1.概述 Qt采用了一种全新的对象和方法的关联与通信机制,称为信号和槽机制.信号和槽机制是独立于标准C++编译器的,在编译之前需要经过Qt的专门预处理工具MOC(Meta Object ...

最新文章

  1. Tomcat关闭日志catalina.out
  2. The RSpec Book笔记《一》初步认识TDD,BDD,RSpec,Cucumber
  3. 淘宝文件系统文件映射原理及实现
  4. 面向程序员的数据挖掘指南: 第二章 从推荐系统开始
  5. 过滤器跟拦截器的区别
  6. Python的运算符和编码
  7. apache.camel_Apache Camel 3.1 –更多骆驼核心优化(第3部分)
  8. winshark重要数据结构
  9. 从golang-gin-realworld-example-app项目学写httpapi (四)
  10. 高通宣布与蔚来合作下一代数字座舱技术
  11. C++程序代码:类实现——【calculator】计算器程序设计
  12. DCIM有助于数据中心的UPS部署
  13. java 十六进制数的转换
  14. 链接了dpdk的进程启动core在 Illegal instruction
  15. linux开发板命令rx,linux 常用命令汇总
  16. 在计算机操作中粘贴的快捷键是什么,电脑复制粘贴的快捷键是什么
  17. 西南大学计算机学院导师,西南大学计算机与信息科学学院研究生导师简介-胡小方...
  18. Xftp5 安装教程
  19. 用python制作英文字典的分析_分享一个自己做的英文科学写作检查器
  20. Android RadioGroup中横向 竖向布局RadioButton的问题

热门文章

  1. 元宇宙|世界人工智能大会之元宇宙论坛:设计篇
  2. 海关外贸企业大数据风控平台产品应用
  3. iperf测试工具使用方法
  4. 数据清洗(一)-----------重复数据处理
  5. 面试时Dubbo原理记不住?来看看《Dubbo原理浅析——从RPC本质看Dubbo》
  6. 【数据挖掘】1、综述:背景、数据的特征、数据挖掘的六大应用方向、有趣的案例
  7. 半导体TEC高低温实验设备-温控仪|固体温度控制、实验、科研
  8. 表格td的宽度不随内容自适应
  9. 科学论文类型分类(letter, perspective, focus, article)以及影响引子,SCI、EI等
  10. 15米 GMSLFPDLink传输线束降速问题