码迷,mamicode.com
首页 > 其他好文 > 详细

signal信号

时间:2016-03-31 01:53:52      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:

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

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

由于信号会中断程序的正常控制流,如果在中间接收到信号,有些操作(特别是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信号

标签:

原文地址:http://www.cnblogs.com/xautxuqiang/p/5339602.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!