python signal

Python实战:信号处理:signal模块 本文详细介绍了Python中的信号处理:signal模块的原理、使用方法以及在实际编程中的应用。通过具体代码示例,我们了解到signal模块在Python编程中的重要性。掌握signal模块对于编写健壮、响应性好的Python程序至关重要。 阅读详情

Python】简单聊进程间异步通信之signal模块

Linux


信号是Unix系统中常见的一种进程间通信方式(IPC),例如我们经常操作的 kill -9 pid 这里的 -9对应的就是 SIGKILL 信号, 9就是这个信号的编号,SIGKILL是它的名称。 由于不同版本的 *nux 的实现会有差异,具体请参照系统API,我这里是OSX,可以使用 man signal查看所有信号的定义。这里简单的学习下Python标准库中信号处理的模块 signal模块.

信号是啥?

由于signal是系统编程的接口,那么咱们来看看他的概念。

信号(signal)是Linux进程间通信的一种机制,全称为软中断信号,也被称为软中断。信号本质上是在软件层次上对硬件中断机制的一种模拟。

再来看看常用的场景

与其他进程间通信方式(例如管道、共享内存等)相比,信号所能传递的信息比较粗糙,只是一个整数。但正是由于传递的信息量少,信号也便于管理和使用,可以用于系统管理相关的任务,例如通知进程终结、中止或者恢复等。每种信号用一个整型常量宏表示,以SIG开头,比如SIGCHLD、SIGINT等,它们在系统头文件中定义。

更具体的介绍和详细的机制原理,请参考 《Unix环境高级编程》等书籍。

自己的理解就是:可以给一个正在运行的进程发送不同的信号,然后进程就能立即收到这个通知,并且做出响应的行为。

常用的几个信号

编号 名称 作用
1 SIGHUP 终端挂起或者终止进程。默认动作为终止进程
2 SIGINT 键盘中断 <ctrl+c> 经常会用到。默认动作为终止进程
3 SIGQUIT 键盘退出键被按下。一般用来响应 <ctrl+d>。 默认动作终止进程
9 SIGKILL 强制退出。 shell中经常使用
14 SIGALRM 定时器超时,默认为终止进程
15 SIGTERM 程序结束信号,程序一般会清理完状态在退出,我们一般说的优雅的退出

signal模块

在文档的开头,讲述了Python signal对于系统的封装和一些使用常识, 使用之前应当认真阅读一下。

常用的API
  • signal.signal(signalnum, handler) 针对不同的信号需要定义对应的处理函数,当运行中的程序接受到对应的信号时候,会调用对应的handler。 handler函数应当有2个参数,一个是 signalnum, 另一是 stack frame(None 或者是 frame对象)

例如写一个小程序,来处理 ctrl+c事件和 SIGHUP,也就是1和2信号。

 
  1. #coding:utf-8
  2. #orangleliu py2.7
  3. #recv_signal.py
  4. import signal
  5. import time
  6. import sys
  7. import os
  8. def handle_int(sig, frame):
  9. print "get signal: %s, I will quit"%sig
  10. sys.exit(0)
  11. def handle_hup(sig, frame):
  12. print "get signal: %s"%sig
  13. if __name__ == "__main__":
  14. signal.signal(2, handle_int)
  15. signal.signal(1, handle_hup)
  16. print "My pid is %s"%os.getpid()
  17. while True:
  18. time.sleep(3)

我们来测试下,首先启动程序(根据打印的pid),在另外的窗口输入 kill -1 21838 和 kill -HUP 21838, 最后使用 ctrl+c关闭程序。 程序的输出如下:

 
  1. # python recv_signal.py
  2. My pid is 21838
  3. get signal: 1
  4. get signal: 1
  5. ^Cget signal: 2, I will quit
  • signal.getsignal(signalnum) 根据signalnum返回信号对应的handler,可能是一个可以调用的Python对象,或者是 signal.SIG_IGN(表示被忽略), signal.SIG_DFL(默认行为已经被使用) 或 None(Python的handler还没被定义)。

获取signal中定义的信号num和名称,还有它的handler是什么

 
  1. #coding:utf-8
  2. #orangleliu py2.7
  3. #getsignal_handler.py
  4. import signal
  5. def handle_hup(sig, frame):
  6. print "get signal: %s"%sig
  7. signal.signal(1, handle_hup)
  8. if __name__ == "__main__":
  9. ign = signal.SIG_IGN
  10. dfl = signal.SIG_DFL
  11. print "SIG_IGN", ign
  12. print "SIG_DFL", dfl
  13. print "*"*40
  14. for name in dir(signal):
  15. if name[:3] == "SIG" and name[3] != "_":
  16. signum = getattr(signal, name)
  17. gsig = signal.getsignal(signum)
  18. print name, signum, gsig

运行的结果:可以看到大部分信号都是都有默认的行为。

 
  1. SIG_IGN 1
  2. SIG_DFL 0
  3. ****************************************
  4. SIGABRT 6 0
  5. SIGALRM 14 0
  6. SIGBUS 10 0
  7. SIGCHLD 20 0
  8. SIGCONT 19 0
  9. SIGEMT 7 0
  10. SIGFPE 8 0
  11. SIGHUP 1 <function handle_hup at 0x109371c80>
  12. SIGILL 4 0
  13. SIGINFO 29 0
  14. SIGINT 2 <built-in function default_int_handler>
  15. SIGIO 23 0
  16. SIGIOT 6 0
  17. SIGKILL 9 None
  18. SIGPIPE 13 1
  19. SIGPROF 27 0
  20. SIGQUIT 3 0
  21. SIGSEGV 11 0
  22. SIGSTOP 17 None
  23. SIGSYS 12 0
  24. SIGTERM 15 0
  25. SIGTRAP 5 0
  26. SIGTSTP 18 0
  27. SIGTTIN 21 0
  28. SIGTTOU 22 0
  29. SIGURG 16 0
  30. SIGUSR1 30 0
  31. SIGUSR2 31 0
  32. SIGVTALRM 26 0
  33. SIGWINCH 28 0
  34. SIGXCPU 24 0
  35. SIGXFSZ 25 1
  • 多线程使用信号

参考

PYthon signal总结 预设信号处理函数 signal包的核心是使用signal.signal()函数来预设(register)信号处理函数,如下所示: singnal.signal(signalnum, handler) signalnum为某个信号,handler为该信号的处理函数。我们在信号基础里提到,进程可以无视信号,可以采取默认操作,还可以自定义操作。当handler为signal.SIG 阅读详情

相关推荐

python signal 模块的本质详解

Python的signal模块是操作系统信号机制与Python程序之间的桥梁,允许程序处理异步中断事件。信号是操作系统层面的软件中断,如SIGINT(Ctrl+C)或SIGTERM(kill命令)。模块核心包括信号类型、处理器函数和注册机制,通过signal.signal()将Python函数绑定到特定信号。典型应用包括优雅退出程序(捕获中断信号进行清理)和实现超时控制(通过SIGALRM)。由于信号处理是异步且底层的,使用时需谨慎。该模块在Unix/Linux系统上功能完整,但部分特性(如signal.a

m0_49133355的博客 1148

Python信号处理函数 (signal)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 @[Python 信号处理函数 (signal)](文章Python模块之信号(signal) 在了解了Linux的信号基础之 后,Python标准库中的signal包就很容易学习和理解。signal包负责在Python程序内部处理信号,典型的操作包括预设信号处理函数,暂 停并等待信号,以及定时发出SIGALRM等。要注意,signal包主要是针对UNIX平台(比如Linux, MAC OS),而Windows内核中由于对信号机制的支持不充

weixin_44573243的博客 1万+

python处理signal(信号)

如何用python语言处理信号

hutaotaotao的博客 1782

Python之signal模块详解

信号:进程之间通讯的方式,是一种软件中断。一个进程一旦接收到信号就会打断原来的程序执行流程来处理信号。操作系统规定了进程收到信号以后的默认行为,但是,我们可以通过绑定信号处理函数来修改进程收到信号以后的行为,有两个信号是不可更改的SIGTOP和SIGKILL。 发送信号一般有两种原因: 1(被动式) 内核检测到一个系统事件.例如子进程退出会像父进程发送SIGCHLD信号.键盘按下control+c会发送SIGINT信号 2(主动式) 通过系统调用kill来向指定进程发送信号 接...

Good Good Sleep, Day Day Code. 4853

NVIDIA vGPU三种授权方式(个人玩家版)

NVIDIA vGPU三种方式搭建授权服务器(个人玩家版)

wstc2689784536的博客 8439

Codex驱动AEDT完成无线充电仿真——从双线圈建模到三维电磁场动画

本文介绍了一个利用Codex、PyAEDT和Ansys Electronics Desktop 2025 R2实现双线圈无线充电系统自动建模与仿真的案例。通过简化模型(平面线圈+铁氧体磁芯),完成了从参数化建模、电磁场求解到后处理的全流程自动化,获得了耦合系数(k=0.17)、三维电磁场分布及多周期动态可视化效果。研究发现:线圈间距对传输效率影响最大(10-30mm间距时效率从40.2%降至5.57%),横向偏移15mm会使效率下降35%,而磁芯厚度增加带来的效率提升有限(3→7mm仅提高1.67%)。该框

sjjsjjsjjsjjsjj的博客 447

python信号_python 之信号Signal

信号signal 是python进程间进行信号发送的一种机制,其原理是操作系统对进程的控制,是一种程序中断一个进程一旦接收到信号就会打断原来的程序执行流程来处理信号。那么singanl到底有什么用呢?siganl的应用:1.故障定位技术(进程的底层故障,例如进程突然中断和一些可能性较小的故障)2. 对进程的流程控制首先说说与信号signal有关的几个函数(1)os.kill(pid,sig)发送一...

weixin_29029731的博客 7091

【Verilog模块例化全解析:从入门到精通】

本文详细解析了Verilog模块例化的核心概念与方法。主要内容包括: 模块定义与例化的基本概念,强调模块例化会生成独立硬件电路; 两种端口连接方式:位置映射(按顺序连接)和名称映射(按端口名连接),推荐使用名称映射提高可读性; 参数化例化方法,通过parameter实现可配置模块设计; 多层模块嵌套的实战应用,展示复杂设计的层次化实现。 文章通过2位加法器等代码示例,对比分析了不同例化方式的优缺点,为硬件设计中的模块复用提供了实用指导。重点推荐名称映射和参数化设计方法,以提高代码可维护性和设计灵活性。

m0_58476824的博客 1328

Python Signal

信号Signal 信号Signal的全称为软中断信号,是用来通知进程发生了异步事件,是在软件层次上对中断机制的一种模拟。原理上一个进程收到一个信号与CPU收到一个中断请求可以说是类似的。 信号是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达。事实上进程也不知道信号到底什么时候到达,进程之间可以相互通过系统调用kill发送软中断信号。内核也可以因为内部...

JunChow 390

实战演练,如何用Easyexcel合并单元格,设置字体、边框样式,并在尾行加入备注

,实现效果如下:1、多级表头合并2、表头底纹+表格边框3、合并相同数据单元格4、尾行加入备注。

Su7148的博客 1万+

Android软键盘系统深度解析:架构、原理与实现

Android软键盘系统深度解析:架构与实现原理 本文系统剖析了Android软键盘的核心工作机制。作为系统级输入服务,软键盘具有双重属性:既是可安装的独立应用,又深度集成于系统框架中。文章详细解读了软键盘的系统架构,包括其与InputMethodManagerService(IMMS)和WindowManagerService(WMS)的交互机制,以及通过InputConnection实现的跨进程通信流程。同时分析了输入法窗口的特殊管理策略、布局调整模式,并深入探讨了输入预测引擎的实现原理,包括词典加载、

保持专注,保持热爱 115

python信号_python 信号Signal的简单示例

这篇文章主要为大家详细介绍了python 信号Signal的简单示例,具有一定的参考价值,可以用来参考一下。对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧!信号signal 是python进程间进行信号发送的一种机制,其原理是操作系统对进程的控制,是一种程序中断一个进程一旦接收到信号就会打断原来的程序执行流程来处理信号。那么singanl到底有什么用呢?sig...

weixin_39838302的博客 364

海思图像质量之HiPQTool调试

文章目录一. HiPQTool 界面二. 图像调试三. 将调试参数写入程序中 一. HiPQTool 界面 二. 图像调试 三. 将调试参数写入程序中

lzg2011的博客 2382

python 之信号Signal

信号signal 是python进程间进行信号发送的一种机制,其原理是操作系统对进程的控制,是一种程序中断一个进程一旦接收到信号就会打断原来的程序执行流程来处理信号。那么singanl到底有什么用呢?siganl的应用:1. 故障定位技术(进程的底层故障,例如进程突然中断和一些可能性较小的故障)2. 对进程的流程控制 首先说说与信号signal有关的几个...

Alex 985

【网络安全 | 渗透工具】Hydra安装使用详细教程

Hydra,也称九头蛇,是一款非常强大的暴力破解工具(密码能否被破解关键在于字典是否足够强大),支持多种服务协议的账号和密码进行爆破,包括Web登录、数据库、SSH、FTP等服务,支持Linux、Windows、Mac平台安装。该工具支持以下协议的爆破:Hydra在kali中自带,这里介绍windows下的安装方法。zip下载地址:https://gitcode.com/maaaaz/thc-hydra-windows/tree/master下载完成后解压: 再将thc-hydra-windows-mast

等风来 9201

【LLC快速上手系列】LLC轻载时:开关频率 + 死区时间 联合优化!

轻载优化,频率别飞天,死区要有耐心。两手一起抓,效率高到笑。😎。

weixin_43199439的博客 1187

python信号_python学习笔记——信号模块signal

基于python学习笔记——多进程间通信——Linux信号基础的学习基础,进一步学习Python标准库中的signal模块。尽管signal是python中的模块,但是主要针对UNIX平台(比如Linux,MAC OS),而Windows内核中由于对信号机制的支持不充分,所以在Windows上的Python不能发挥信号系统的功能。signal模块负责python程序内部的信号处理;典型的操作包括信...

weixin_39824223的博客 516

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

python信号_Python中常用信号signal类型实例

本文研究的主要是Python中的Signal 信号的相关内容,具体如下。常用信号类型SIGINT 终止进程 中断进程,不可通过signal.signal()捕捉(相当于Ctrl+C)SIGTERM 终止进程 软件终止信号,可通过signal.signal()捕捉(默认信号,当os.kill()没有指明信号类型时,默认的是该信号)SIGKILL 终止进程 杀死进程,不可捕捉(相当于linux下的ki...

weixin_39574868的博客 729

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Signal:python用信号处理程序的机制及用法举例

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

Aiky哇 1618

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

python进程间通信--信号Signal

信号signal 是python进程间通信多种机制中的其中一种机制。可以对操作系统进程的控制,当进程中发生某种原因而中断时,可以异步处理这个异常。 信号通过注册的方式‘挂’在一个进程中,并且不会阻塞该进程的运行。一个进程一旦接收到其他进程(可能是应用中的其他进程,也可能使操作系统中的进程)发送的信号就会打断原来的程序执行流程来处理这个信号。 名词理解: 异步: 程序在执行中利用内核功能...

weixin_30707875的博客 1565

python模块之signal信号

python模块之signal信号 1、简介 作用:发送和接收异步系统信号 信号是一个操作系统特性,它提供了一个途径可以通知程序发生了一个事件并异步处理这个事件。信号可以由系统本身生成,也可以从一个进程发送到另一个进程。 由于信号会中断程序的正常控制流,如果在中间接收到信号,有些操作(特别是I/O操作)可能会发生错误。 接收信号 signal.signal(sig,action) sig为某个信号,action为该信号的处理函数**。** 例如: signal.signal(signal.SIGALRM,

苏木的博客 2556

python信号_Python模块之信号(signal)

在了解了Linux的信号基础之 后,Python标准库中的signal包就很容易学习和理解。signal包负责在Python程序内部处理信号,典型的操作包括预设信号处理函数,暂 停并等待信号,以及定时发出SIGALRM等。要注意,signal包主要是针对UNIX平台(比如Linux, MAC OS),而Windows内核中由于对信号机制的支持不充分,所以在Windows上的Python不能发挥信号...

weixin_39615402的博客 476

python信号_Python Signal

信号Signal信号Signal的全称为软中断信号,是用来通知进程发生了异步事件,是在软件层次上对中断机制的一种模拟。原理上一个进程收到一个信号与CPU收到一个中断请求可以说是类似的。信号是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达。事实上进程也不知道信号到底什么时候到达,进程之间可以相互通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,...

weixin_39834984的博客 649
上一篇: exit properly shell script
下一篇: tcpdump practice
screaming
博客等级 码龄19年 61粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值