zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    两个链表的第一个公共节点
    笔试题总结
    SMTP协议分析
    用两个栈实现一个队列
    医院Android项目总结
    C标准I/O库函数与Unbuffered I/O函数
    ELF文件
    x86汇编程序基础(AT&T语法)
    【转】Linux C动态内存泄漏追踪方法
    Minor【 PHP框架】6.代理
  • 原文地址:https://www.cnblogs.com/zhangjpn/p/12901166.html
Copyright © 2011-2022 走看看