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

  • 相关阅读:
    Funny Car Racing
    [LDUoj 倍增] 题解
    [HDU7073] Integers Have Friends 2.0 -随机大法好
    【spring】全局异常 globalexception 处理
    【maven】测试
    【spring】spring aop
    jvm常用排错命令
    idea tools
    idea插件
    【maven】搭建maven私服--基于CentOS7.6+docker
  • 原文地址:https://www.cnblogs.com/zhangjpn/p/12901166.html
Copyright © 2011-2022 走看看