signal信号

Posted 小黄人python

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了signal信号相关的知识,希望对你有一定的参考价值。

  作用:发送和接收异步系统信号

  信号是一个操作系统特性,它提供了一个途径可以通知程序发生了一个事件并异步处理这个事件。信号可以由系统本身生成,也可以从一个进程发送到另一个进程。

由于信号会中断程序的正常控制流,如果在中间接收到信号,有些操作(特别是I/O操作)可能会发生错误。

 

接收信号:

  signal.signal(sig,action)

  sig为某个信号,action为该信号的处理函数

  例如:

    signal.signal(signal.SIGALRM, hanlder)       hanlder为信号处理函数

  sig信号:

  >>> dir(signal)
  [CTRL_BREAK_EVENT, CTRL_C_EVENT, NSIG, SIGABRT, SIGBREAK, SIGFPE,
  SIGILL, SIGINT, SIGSEGV, SIGTERM, SIG_DFL, SIG_IGN, __doc__, __name__, __package__,
  ‘default_int_handler, getsignal, set_wakeup_fd, signal]

  

 

  即通过建立一个回调函数来接收信号,这个回调函数称为信号处理函数(signal hanlder),它会在信号出现时调用。

 信号处理函数包括信号编号及被信号中断那一时刻的栈帧。

  

  def hanlder(signum, frame):

      something...

 

  signum即信号编号( 数字),例如:

  

  Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32
  Type "copyright", "credits" or "license()" for more information.
  >>> import signal
  >>> signal.SIGINT
  2
  >>> 

  frame为被信号中断那一时刻的栈帧。

=================================================================================================

接收信号:

import signal
import os
import time

def receive_signal(signum, stack):
    print Received:, signum

# Register signal hanlders
signal.signal(signal.SIGUSR1, receive_signal)
signal.signal(signal.SIGUSR2, receive_signal)

# Print the process ID so it can be used with ‘kill‘
# to send this program signals.
print My PID is:, os.getpid()

while True:
    print Waiting...
    time.sleep(3)

SIGUSR1和SIGUSR2是留给用户使用的信号。

以上是关于signal信号的主要内容,如果未能解决你的问题,请参考以下文章

信号 signal

django信号 signal

进程间通信之-信号signal--linux内核剖析

信号(SIGNAL)与槽(SLOT)

python signal(信号)

signal()信号操作