永发信息网

python 判断脚本中断问题

答案:3  悬赏:70  手机版
解决时间 2021-11-10 01:59
  • 提问者网友:愿为果
  • 2021-11-09 15:34
python 判断脚本中断问题
最佳答案
  • 五星知识达人网友:执傲
  • 2021-11-09 15:49
通过信号量来处理,python 提供signal模块。当用户按Ctrl+C结束进程时,会执行特定代码。
信号的概念
信号(signal)--     进程之间通讯的方式,是一种软件中断。一个进程一旦接收到信号就会打断原来的程序执行流程来处理信号。
几个常用信号:
SIGINT     终止进程  中断进程  (control+c)
SIGQUIT   退出进程
SIGTERM   终止进程     软件终止信号  (默认信号)
SIGKILL   终止进程     杀死进程
SIGALRM 闹钟信号
当直接写kill PID,默认是SIGTERM
代码示例:
import time
from signal import signal, SIGINT

def ctlc(a,b):
    print('ctrk+c')
    exit(2)

signal(SIGINT, ctlc)
while True:  
    time.sleep(1)
全部回答
  • 1楼网友:鱼芗
  • 2021-11-09 17:23
用信号

import signal

def handler(signum, frame):
close()

.....

signal.signal(signal.SIGINT, handler) #设置信号处理函数,当SIGINT中断时响应
  • 2楼网友:酒醒三更
  • 2021-11-09 16:43

使用 signal 模块 (首先你要先有 unix/linux 下信号 signal 的一些基本概念,才能理解 signal 模块,这块内容你自己去搜索吧)


参考下面的代码,函数 cb 会在程序收到 SIGINT (ctrl-c 产生,即 KeyboardInterrupt)和 SIGTERM 时调用,你应该在里面加上close。 后面那个 while True 循环模拟你那个永久写数据的代码。 这个程序就可以在收到 SIGINT SIGTERM 信号时达到你要的效果。



import signal, time

def cb(s, f):
    print 'recv signal', s
# close at here
    exit(0)



signal.signal(signal.SIGTERM, cb)
signal.signal(signal.SIGINT, cb)

print 'start'
while True:
    time.sleep(1)
print 'done'
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯