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操做,应用都没法退出,而使用第一种方法,则能够结束。