博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python signal handling
阅读量:4030 次
发布时间:2019-05-24

本文共 3375 字,大约阅读时间需要 11 分钟。

Python - Signal handling and identifying stack frame 

Reference: 
http://itsjustsosimple.blogspot.jp/2014/01/python-signal-handling-and-identifying.html
Signals are identified by integers and are defined in the operating system C headers. Python exposes the signals appropriate for the platform as symbols in the 
'signal' 
module. 
the signal module in python is used to install your own signal handlers.  When the interpreter sees a signal, the signal handler associated with that signal is executed as soon as possible.
signal handler is a call back function, t
he arguments to the signal handler are the signal number and the stack frame from the point in your program that was interrupted by the signal.
 
First basic example:
import signal,timedef signal_handler(signum, stack):    print 'Received:', signumsignal.signal(signal.SIGHUP, signal_handler)signal.signal(signal.SIGINT, signal_handler)
signal.signal(15, signal_handler)while True:    print 'Waiting...try kill using signal 1(SIGHUP) or 2(SIGINT)'    time.sleep(3)
Linux Standard signals:
from signal man page:
       Signal     Value     Action   Comment
       -------------------------------------------------------------------------
       SIGHUP        1       Term    Hangup detected on controlling terminal 
or death of controlling process
       SIGINT        2        Term    Interrupt from keyboard
       SIGQUIT       3      Core    Quit from keyboard
       SIGILL        4        Core    Illegal Instruction
       SIGABRT       6      Core    Abort signal from abort(3)
       SIGFPE        8       Core    Floating point exception
       SIGKILL       9       Term    Kill signal
       SIGSEGV      11     Core    Invalid memory reference
       SIGPIPE      13      Term    Broken pipe: write to pipe with no readers
       SIGALRM      14       Term    Timer signal from alarm(2)
       SIGTERM      15       Term    Termination signal
       SIGUSR1   30,10,16    Term    User-defined signal 1
       SIGUSR2   31,12,17    Term    User-defined signal 2
       SIGCHLD   20,17,18    Ign     Child stopped or terminated
       SIGCONT   19,18,25    Cont    Continue if stopped
       SIGSTOP   17,19,23    Stop    Stop process
       SIGTSTP   18,20,24    Stop    Stop typed at tty
       SIGTTIN   21,21,26    Stop    tty input for background process
       SIGTTOU   22,22,27    Stop    tty output for background process
The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored. 
How to trap all the signals (except few..!!) ??
here is the example: 
#!/usr/bin/pythonimport signaldef sighandler(signum, frame): print "Caough signal :", signumfor x in dir(signal):  if x.startswith("SIG"):     try:        signum = getattr(signal,x)        signal.signal(signum,sighandler)     except:        print "Skipping %s"%x   while True:      pass
Printing stack frames :
The frame argument is the stack frame also known as execution frame. It point to the frame that was interrupted by the signal. to print the stack trace you need to use '
traceback' module. 
this is very useful in multi-threaded program because any thread might be interrupted by a signals and signal is only received by the main program. 
#!/usr/bin/pythonimport signal,tracebackdef sighandler(signum, frame): print "Caough signal :", signum traceback.print_stack(frame)for sig in dir(signal):  if sig.startswith("SIG"):     try:        signum = getattr(signal,sig)        signal.signal(signum,sighandler)     except:        print "Skipping %s"%sig   while True:      pass
Ignoring signals:
To ignore a signal, register 
SIG_IGN
 as the handler (no call back required). This will ignore the ctr+c signal raised from terminal.
#!/usr/bin/pythonimport signalsignal.signal(signal.SIGINT,signal.SIG_IGN)while True: pass

转载地址:http://myebi.baihongyu.com/

你可能感兴趣的文章
java反编译命令
查看>>
activemq依赖包获取
查看>>
概念区别
查看>>
关于静态块、静态属性、构造块、构造方法的执行顺序
查看>>
final 的作用
查看>>
在Idea中使用Eclipse编译器
查看>>
idea讲web项目部署到tomcat,热部署
查看>>
优化IDEA启动速度,快了好多。后面有什么优化点,会继续往里面添加
查看>>
JMeter 保持sessionId
查看>>
IDEA Properties中文unicode转码问题
查看>>
Idea下安装Lombok插件
查看>>
zookeeper
查看>>
Idea导入的工程看不到src等代码
查看>>
技术栈
查看>>
Jenkins中shell-script执行报错sh: line 2: npm: command not found
查看>>
8.X版本的node打包时,gulp命令报错 require.extensions.hasownproperty
查看>>
Jenkins 启动命令
查看>>
Maven项目版本继承 – 我必须指定父版本?
查看>>
Maven跳过单元测试的两种方式
查看>>
通过C++反射实现C++与任意脚本(lua、js等)的交互(二)
查看>>