信号signal

信号的概念

非确定性信号(signal卡塔 尔(英语:State of Qatar)–     进程之间通讯的主意,是黄金时代种软件中断。叁个经过生机勃勃旦选取届期限信号就可以阻塞原本的程序实践流程来管理时域信号。

多少个常用实信号:

SIGINT     终止进程  中断进度  (control+c)

SIGTERM   终止进程     软件终止频限信号

SIGKILL   终止进度     杀死进度

SIGALRM 挂钟时限信号

 

进程停止实信号 SIGTERM和SIGKILL的分别

SIGTERM相比较友好,进度能捕捉那么些非数字信号,依据你的供给来关闭程序。在关闭程序早先,您可以了结张开的记录文件和造成正在做的职分。在一些情状下,要是进度正在开展学业而且无法暂停,那么进度可以忽视那么些SIGTERM功率信号。

对于SIGKILL确定性信号,进度是无法忽略的。这是四个 “笔者随意您在做哪些,立即停下”的实信号。倘令你发送SIGKILL时域信号给进程,Linux就将经过甘休在此。

 

出殡时限信号经常常有三种原因:

1(被动式)  内核检查测验到三个系统事件.比方子进度退出会像父进度发送SIGCHLD频域信号.键盘按下control+c会发送SIGINT时域信号

2(主动式)  通过系统调用kill来向钦赐进程发送时限信号

 

 

操作系统规定了经过收到时限信号今后的暗许行为

唯独,大家得以透过绑定确定性信号管理函数来修正进程收到频限信号之后的一举一动

有四个数字信号是不行退换的SIGTOP和SIGKILL

绑定期限信号管理函数:

 

  1.  

    import os

  2.  

    import signal

  3. 太阳集团太阳娱乐登录, 

    from time import sleep

  4.  

     

  5.  

    def onsignal_term(a,b):

  1.  

    print ‘收到SIGTERM信号’

  2.  

     

  3.  

    #此处是绑定实信号处理函数,将SIGTERM绑定在函数onsignal_term上面

  1.  

    signal.signal(signal.SIGTERM,onsignal_term)

  2.  

     

  3.  

    def onsignal_usr1(a,b):

  1.  

    print ‘收到SIGUSR1信号’

  2.  

    #此间是绑定实信号管理函数,将SIGUSPRADO1绑定在函数onsignal_term上面

  1.  

    signal.signal(signal.SIGUSR1,onsignal_usr1)

  2.  

     

  3.  

    while 1:

  1.  

    print ‘小编的历程id是’,os.getpid()

  2.  

    sleep(10)

 

运作该程序。然后经过别的贰个经过来发送非复信号。

发送音信的代码如下:

  1.  

    import os

  2.  

    import signal

  3.  

     

  4.  

    #发送功率信号,16175是后面那多少个绑按时限信号管理函数的pid,须要活动校勘

  1.  

    os.kill(16175,signal.SIGTERM)

  2.  

    #出殡非数字信号,16175是前边那些绑定非能量信号管理函数的pid,必要活动订正

  1.  

    os.kill(16175,signal.SIGUSR1)

行使非能量信号必要非常注意之处:

假使二个历程收到贰个SIGUSCRUISER1时限信号,然后奉行非确定性信号绑定函数,第1个SIGUSCR-V2功率信号又来了,第一个时限信号没有被管理达成的话,第一个随机信号就能够放弃。

据此,尽量不要在四线程中动用实信号。

其一不妥,测量试验没开掘成非确定性信号错过

事例演示:

收届时限信号的前后相继,你会意识只要有其余生龙活虎端应用四线程向那些进度发送时域信号,会挂意气风发漏万一些功率信号。