import sys reload(sys) sys.setdefaultencoding("utf-8") import time import os import signal receive_times = 0 def handler(signalnum, handler): global receive_times print u"收到信号", signalnum, frame, receive_times receive_times += 1 if receive_times > 3: exit(0) # 自己走 def main(): signal.signal(signal.SIGINT, handler) # Ctrl-c # time.sleep(10) # SIGINT 信号同样能唤醒 time.sleep, 所以这里程序就会结束 while True: # 改成 while 效果会好点 pass if __name__ == '__main__': main()
参考:https://blog.csdn.net/weixin_42350212/article/details/80588973
# 简单说:
监听信号,脚本或用户触发,接收信号,执行信号处理函数
# 如下:
当 **signal.signal(signal.SIGTERM, handler)** 监听过程中,
捕获到信号 **signal.SIGTERM** 时, 就会去执行 **handler** 函数
而 **handler**函数中一般都有全局变量,进程或线程通过此全局变量就可以知道该如何执行
**signal.SIGTERM** 信号是由用户或者脚本执行的 **ctrl+c** 或者 **kill** 命令来触发的。