• 欢迎访问挑战自我博客网站,安全研究,web渗透,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入挑战自我博客网站 网站主页

[python]如何处理python程序的主动退出问题

python 挑战自我 1764次浏览 已收录 0个评论

1、遇到的问题简述

当一个python程序所需要的运行时间很长,或者是在多线程python程序中,如果想要立即退出的话,会遇到各种各样的问题,有时候根本无法退出,除非你关闭对应的程序运行客户端。

2、解决办法

近期在完善TZ-SCAN程序时,由于程序包含了多个模块,在运行的时候根本无法停止下来,一般我在程序运行的时候想要把程序停止,狂按ctrl + c都不行,除非我直接关闭cmd控制台,今天国庆节,睡了个懒觉起来继续改一改这个程序,完美地解决了这个问题,下面把这个过程记录下来。

2.1、关于signal库的介绍

要想使用signal库,首先头部必须导入该库文件

import signal

关于signal的几个常用信号类型:

SIGINT     终止进程     中断进程,不可通过signal.signal()捕捉(相当于Ctrl+C)  
SIGTERM    终止进程     软件终止信号,可通过signal.signal()捕捉(默认信号,当os.kill()没有指明信号类型时,默认的是该信号)  
SIGKILL    终止进程     杀死进程,不可捕捉(相当于linux下的kill命令,windows下使用会抛出异常)  
SIGALRM    闹钟信号     可以通过signal.alarm()和os.kill()发送该信号,可通过signal.signal()捕捉  
SIGQUIT    退出进程     和SIGTERM类似,可通过signal.signal()捕捉  

2.2、TZ-SCAN中的应用实例

简单地把TZ-SCAN中的实例抽象出来

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import signal
import os
import time
import sys
 
def quit(signum, frame):
    print '\nYou choose to stop me!!'
    sys.exit()
 
signal.signal(signal.SIGINT, quit)
signal.signal(signal.SIGTERM, quit)

while 1:  
    print 'id: ',os.getpid()  
    time.sleep(2) 

上面这个测试程序是每隔两秒打印当前程序进程,按ctrl + c的时候,程序会柔和地退出,如下图所示

[python]如何处理python程序的主动退出问题


挑战自我博客, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明[python]如何处理python程序的主动退出问题
喜欢 (9)
支付宝[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址