ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python signal笔记

2020-05-16 16:58:27  阅读:234  来源: 互联网

标签:python signal 笔记 终止 信号 进程 栈帧


简单说明

python signal 模块是对系统进程信号的实现。在进程运行过程中,进程会后台监听信号事件,执行相应的处理函数。例如ctrl+c键盘中断事件,kill -9强制杀死进程命令,都是向进程发送相应的信号。每个信号有一个编号和名称。其作用是一样的,在标准库中作为常量定义。

简单使用


import signal

def handler(signum, frame):
    # do something
    pass

signal.signal(signal.SIGINT, handler)

# 通过信号名称获取对应注册的函数
func = signal.getsignal(signal.SIGTERM)


# 向自身发送SIGARARM信号,避免持续阻塞
signal.alarm(5)


# 暂停进程以等待信号
signal.pause()

注册函数

信号事件处理函数接受两个参数:信号编号和当前的栈帧(stack frame)或None。栈帧的定义和使用详见 https://docs.python.org/3/reference/datamodel.html#frame-objects 。简单的理解,栈帧就是异常打印出来的那堆东西,当执行事件处理函数时,需要知道进程执行到哪一步,所以需要栈帧来判断进程的执行状态。

常用信号

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

备注

需要注意的并非所有信号都可以自定义处理函数或忽略。比较特殊的一点就是强制退出 SIGKILL,因为如果能被重新的定义的话,可能就没办法杀掉进程了。

引用

https://juejin.im/post/5c0a4a92f265da61682b2f65

标签:python,signal,笔记,终止,信号,进程,栈帧
来源: https://www.cnblogs.com/zhangjpn/p/12901166.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有