位置: 编程技术 - 正文

浅析Python中signal包的使用(python signal模块)

编辑:rootadmin

推荐整理分享浅析Python中signal包的使用(python signal模块),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python signal模块,python中signal函数,python signal.alarm,python中signal函数,python signal.alarm,python的signal,signalr python,signalr python,内容如对您有帮助,希望把文章链接给更多的朋友!

在liunx系统中要想每隔一分钟执行一个命令,最普遍的方法就是crontab了,如果不想使用crontab,经同事指点在程序中可以用定时器实现这种功能,于是就开始摸索了,发现需要一些信号的知识...

查看你的linux支持哪些信号:kill -l 即可

1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL ) SIGUSR) SIGSEGV ) SIGUSR2 ) SIGPIPE ) SIGALRM ) SIGTERM) SIGSTKFLT ) SIGCHLD ) SIGCONT ) SIGSTOP ) SIGTSTP) SIGTTIN ) SIGTTOU ) SIGURG ) SIGXCPU ) SIGXFSZ) SIGVTALRM ) SIGPROF ) SIGWINCH ) SIGIO ) SIGPWR) SIGSYS ) SIGRTMIN ) SIGRTMIN+1 ) SIGRTMIN+2 ) SIGRTMIN+) SIGRTMIN+4 ) SIGRTMIN+5 ) SIGRTMIN+6 ) SIGRTMIN+7 ) SIGRTMIN+) SIGRTMIN+9 ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX-) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX-9 ) SIGRTMAX-8 ) SIGRTMAX-) SIGRTMAX-6 ) SIGRTMAX-5 ) SIGRTMAX-4 ) SIGRTMAX-3 ) SIGRTMAX-) SIGRTMAX-1 ) SIGRTMAX root@server:~# 信号:进程之间通讯的方式,是一种软件中断。一个进程一旦接收到信号就会打断原来的程序执行流程来处理信号。操作系统规定了进程收到信号以后的默认行为,但是,我们可以通过绑定信号处理函数来修改进程收到信号以后的行为,有两个信号是不可更改的SIGTOP和SIGKILL。 发送信号一般有两种原因: 1(被动式) 内核检测到一个系统事件.例如子进程退出会像父进程发送SIGCHLD信号.键盘按下control+c会发送SIGINT信号 2(主动式) 通过系统调用kill来向指定进程发送信号

在C语言中有个setitimer函数,函数setitimer可以提供三种定时器,它们相互独立,任意一个定时完成都将发送定时信号到进程,并且自动重新计时。参数which确定了定时器的类型:

ITIMER_REAL 定时真实时间,与alarm类型相同。 SIGALRMITIMER_VIRT 定时进程在用户态下的实际执行时间。 SIGVTALRMITIMER_PROF 定时进程在用户态和核心态下的实际执行时间。 SIGPROF 这三种定时器定时完成时给进程发送的信号各不相同,其中ITIMER_REAL类定时器发送SIGALRM信号,ITIMER_VIRT类定时器发送SIGVTALRM信号,ITIMER_REAL类定时器发送SIGPROF信号。 函数alarm本质上设置的是低精确、非重载的ITIMER_REAL类定时器,它只能精确到秒,并且每次设置只能产生一次定时。函数setitimer设置的定时器则不同,它们不但可以计时到微妙(理论上),还能自动循环定时。在一个Unix进程中,不能同时使用alarm和ITIMER_REAL类定时器。

SIGINT 终止进程 中断进程 (control+c) SIGTERM 终止进程 软件终止信号 SIGKILL 终止进程 杀死进程 SIGALRM 闹钟信号

前期的知识也准备的差不多了,该向python的signal进军了。

定义信号名

signal包定义了各个信号名及其对应的整数,比如

Python所用的信号名和Linux一致。你可以通过

查询

预设信号处理函数

signal包的核心是使用signal.signal()函数来预设(register)信号处理函数,如下所示:

浅析Python中signal包的使用(python signal模块)

signalnum为某个信号,handler为该信号的处理函数。我们在信号基础里提到,进程可以无视信号,可以采取默认操作,还可以自定义操作。当handler为signal.SIG_IGN时,信号被无视(ignore)。当handler为singal.SIG_DFL,进程采取默认操作(default)。当handler为一个函数名时,进程采取函数中定义的操作。

在主程序中,我们首先使用signal.signal()函数来预设信号处理函数。然后我们执行signal.pause()来让该进程暂停以等待信号,以等待信号。当信号SIGUSR1被传递给该进程时,进程从暂停中恢复,并根据预设,执行SIGTSTP的信号处理函数myHandler()。myHandler的两个参数一个用来识别信号(signum),另一个用来获得信号发生时,进程栈的状况(stack frame)。这两个参数都是由signal.singnal()函数来传递的。

上面的程序可以保存在一个文件中(比如test.py)。我们使用如下方法运行:

以便让进程运行。当程序运行到signal.pause()的时候,进程暂停并等待信号。此时,通过按下CTRL+Z向该进程发送SIGTSTP信号。我们可以看到,进程执行了myHandle()函数, 随后返回主程序,继续执行。(当然,也可以用$ps查询process ID, 再使用$kill来发出信号。)

(进程并不一定要使用signal.pause()暂停以等待信号,它也可以在进行工作中接受信号,比如将上面的signal.pause()改为一个需要长时间工作的循环。)

我们可以根据自己的需要更改myHandler()中的操作,以针对不同的信号实现个性化的处理。

定时发出SIGALRM信号

一个有用的函数是signal.alarm(),它被用于在一定时间之后,向进程自身发送SIGALRM信号:

我们这里用了一个无限循环以便让进程持续运行。在signal.alarm()执行5秒之后,进程将向自己发出SIGALRM信号,随后,信号处理函数myHandler开始执行。

发送信号

signal包的核心是设置信号处理函数。除了signal.alarm()向自身发送信号之外,并没有其他发送信号的功能。但在os包中,有类似于linux的kill命令的函数,分别为

分别向进程和进程组(见Linux进程关系)发送信号。sid为信号所对应的整数或者singal.SIG*。

实际上signal, pause,kill和alarm都是Linux应用编程中常见的C库函数,在这里,我们只不过是用Python语言来实现了一下。实际上,Python 的解释器是使用C语言来编写的,所以有此相似性也并不意外。此外,在Python 3.4中,signal包被增强,信号阻塞等功能被加入到该包中。我们暂时不深入到该包中。

python实现mysql的单引号字符串过滤方法 本文实例讲述了python实现mysql的单引号字符串过滤方法。分享给大家供大家参考,具体如下:最主要用这个函数,可以处理MySQLdb.escape_string(content).classGui

Python的Flask开发框架简单上手笔记 最简单的helloworld#!/usr/bin/envpython#encoding:utf-8fromflaskimportFlaskapp=Flask(__name__)@app.route('/')defindex():return'helloworld'if__name__=='__main__':app.run(debug=True)#app.run(host='

Python通过DOM和SAX方式解析XML的应用实例分享 XML.DOM需求有一个表,里面数据量比较大,每天一更新,其字段可以通过xml配置文件进行配置,即,可能每次建表的字段不一样。上游跑时会根据配置从

标签: python signal模块

本文链接地址:https://www.jiuchutong.com/biancheng/378605.html 转载请保留说明!

上一篇:Python下rrdtool模块的基本使用方法(r+python)

下一篇:python实现mysql的单引号字符串过滤方法

  • 车险发票不含车船税怎么记账
  • 车船税的免征对象是什么
  • 什么是印花税的税目
  • 个体户免税金额现在是多少
  • 什么情况下核定征收转为查账征收
  • 过桥过闸通行费会计分录
  • 本月进项税大于销项税有留底,如何做会计分录
  • 商贸公司可以做美容行业吗?
  • 工伤医疗费全赔吗
  • 生产企业运费收入怎么处理?
  • 进项税额留底月底销项税金如何结转?
  • 租赁算投资吗
  • 费用利润率计算公式是什么意思
  • 存货跌价准备转回的条件有哪些
  • 展厅出租或招商
  • 知识产权服务项目
  • 火灾造成的存货损失进项税额如何处理
  • 出口转内销进项转出
  • 纳税申报方式怎么修改
  • 收派服务发票需交税吗
  • 电子发票服务平台诺诺发票官网
  • 普票红冲对方已入账发票拿不回来
  • 普通合伙企业个税怎么算
  • 建筑施工企业跨区域如何缴税
  • 代垫资金的代购是什么
  • 私人公司老板
  • 公司法人的车租赁合法吗
  • 远程主机强迫关闭了现有连接我的世界
  • ghost后分区没有了
  • 怎么做年终结算工资
  • 收外汇的账务处理实例
  • 增值税纳税申报首先要稽核比对
  • 工地需要安装什么标识牌
  • 投资性房地产转为存货
  • 灵活就业养老保险退休后每月领多少钱
  • go开发web项目
  • gitpull命令
  • 增值税普通发票和电子普通发票的区别
  • 做项目前期
  • 在哪里验证增值税票
  • 业务招待费是否计入管理费用
  • 月末研发支出会结转至哪个账户
  • mysql日期和时间分开存的 索引
  • 增值税专用发票几个点
  • 一般纳税人销售旧货税率
  • 支付宝提现到对公账户要收手续费吗
  • 通货紧缩的影响简答题
  • 增值税的专用发票金额含税吗
  • 低值易耗工具有哪些
  • 政府补助的会计准则
  • 固定资产可资本化的后续支出
  • 刻章费用怎么说
  • 公司自己制造设备怎么办
  • 发工资用个人账户还是公司帐户
  • 工资表的重要性
  • 公司借钱不还怎么办
  • 采购商品验收入库的会计分录怎么写
  • 原始凭证基本要求是什么
  • 是不是根据营业执照查询
  • 安装sql2000sp4提示挂起
  • win7系统屏幕一直闪怎么办
  • 有没有类似window的免费软件
  • 苹果发布会亮点速览
  • win10 1511(win10 TH2)如何调整开始屏幕磁贴大小?
  • win10输入法怎么添加美式键盘
  • css一个页面跳转到另一页面
  • python写一个备份文件功能
  • Zxing在CameraManager.get().closeDriver()报错
  • 批处理文件如何运行
  • 从零开始学什么
  • 获取标签的属性值的方式
  • javascript 基础篇2 数据类型,语句,函数
  • 互联网巨头bat有哪些
  • 1+x职业技能等级证书
  • 税控盘解除风险
  • 深圳国税电子税务局入口
  • 城市维护建设税法自2021年10月1日起施行
  • 季度预缴申报表在哪里查询
  • 个人所得税工资达到多少才交税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设