转https://blog.csdn.net/gx19862005/article/details/17241631
https://blog.csdn.net/qq_16583687/article/details/78163015
https://www.cnblogs.com/alexyuyu/articles/3853583.html
信号(signal)是一种进程间通信机制,它给应用程序提供一种异步的软件中断,使应用程序有机会接受其他程序活终端发送的命令(即信号)。应用程序收到信号后,有三种处理方式:忽略,默认,或捕捉。进程收到一个信号后,会检查对该信号的处理机制。如果是SIG_IGN,就忽略该信号;如果是SIG_DFT,则会采用系统默认的处理动作,通常是终止进程或忽略该信号;如果给该信号指定了一个处理函数(捕捉),则会中断当前进程正在执行的任务,转而去执行该信号的处理函数,返回后再继续执行被中断的任务。
signal.signal(signal.SIGINT, sigint_handler)
SIGINT 程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出
sigint_handler 收到程序终止(interrupt)信号,要执行的行为
python ctrl+c 退出while True:
写了一个死循环,类似:
def function():
while True:
#my code
程序运行后想用ctrl+c按键停止程序,可是终止不了。以下为解决办法:
第一步:加入sys,signal模块,定义一个quit函数
import sys
import signal
def quit(signum, frame):
print ''
print 'stop fusion'
sys.exit()
第二步:在funtion函数中加入两行代码:
def funtion():
signal.signal(signal.SIGINT, quit)
signal.signal(signal.SIGTERM, quit)
while True:
#my code