python signal handling
来源:互联网 发布:淘宝直通车掌柜热卖 编辑:程序博客网 时间:2024/05/21 09:21
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, the 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:
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:
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.
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.
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, the 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
0 0
- python signal handling
- Signal Handling
- signal handling in thread
- linux Signal Handling
- Signal Handling--ref
- Revelations on Java signal handling and termination
- Signal Handling on Exceptional Control Flow
- Linux Signal handling(信号处理)Arm64
- python signal
- file handling in python
- exception handling of Python
- Python mechanize gzip response handling
- C and C++ signal handling and C++ signal classes and examples
- python signal处理
- 四、Python Signal 信号
- python-signal异步事件
- Python Signal 信号
- PYthon signal总结
- 第十周 小学生百以内算术考试系统
- nyoj 303 序号互换 第四届河南省赛
- C++_STL_数据结构_stack_栈
- LeetCode 第四十五题(Jump Game II)Java
- hashmap 死循环解析
- python signal handling
- 通知的各种实用写法技巧
- 数据存取之SQLite浅析
- 创建类的对象
- Flip Game(DFS枚举)
- HQL时间段查询
- Android中五中存储方式的区别和优劣性
- 【驱动开发】006 系统时间
- Centos6.5服务器配置nginx的https证书