Python中的signal模块和Ctrl+C操做

Python中的signal模块处理OS级别的信号。例如Ctrl+C会进程发送信号。bash

参考这里:http://www.javashuo.com/article/p-azwmnisg-eo.htmlapp

Linux上查看信号的方法:ui

[appadmin@BJLTPGPLM1007T ~]$ kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX
[appadmin@BJLTPGPLM1007T ~]$

Python中要捕获信号,须要signal包来处理。.net

几个经常使用信号:
SIGINT     终止进程  中断进程  (control+c)
SIGTERM   终止进程     软件终止信号
SIGKILL   终止进程     杀死进程
SIGALRM 闹钟信号
 线程

进程结束信号 SIGTERM和SIGKILL的区别
SIGTERM比较友好,进程能捕捉这个信号,根据您的须要来关闭程序。在关闭程序以前,您能够结束打开的记录文件和完成正在作的任务。在某些状况下,假如进程正在进行做业并且不能中断,那么进程能够忽略这个SIGTERM信号。
对于SIGKILL信号,进程是不能忽略的。这是一个 “我无论您在作什么,马上中止”的信号。假如您发送SIGKILL信号给进程,Linux就将进程中止在那里。code

发送信号通常有两种缘由:
1(被动式)  内核检测到一个系统事件.例如子进程退出会像父进程发送SIGCHLD信号.键盘按下control+c会发送SIGINT信号
2(主动式)  经过系统调用kill来向指定进程发送信号
 blog

绑定信号,这里以Ctrl+C举例,它会向进程发出中断信号。进程

import signal

def quit_signal_handler(signum,frame):
    pass

signal.signal(signal.SIGINT,quit_signal_handler)

 

关于Ctrl+C,实际工做中遇到一个问题,与thread/threading有关。事件

线程实现的两种方式: thread.start_new_thread和threading.Thread(target=xxx,args=(xxx)).start()。get

作Ctrl+C操做时,若是子线程使用第二种方法发起,那么若是子线程不结束,Ctrl+C中不管是作sys.exit或者os._exit操做,应用都没法退出,而使用第一种方法,则能够结束。

相关文章
相关标签/搜索