python定时检测无响应进程并重启的实例代码


Posted in Python onApril 22, 2019

总有一些程序在windows平台表现不稳定,动不动一段时间就无响应,但又不得不用,每次都是发现问题了手动重启,现在写个脚本定时检测进程是否正常,自动重启。

涉及知识点

  1. schedule定时任务调度
  2. os.popen运行程序并读取解析运行结果

代码分解

脚本主入口

if __name__ == '__main__':
  #每5秒执行检查任务
  schedule.every(5).seconds.do(check_job)
  #此处固定写法,意思是每秒钟schedule看下是否有pending的任务,有就执行
  while True:
    schedule.run_pending()
    time.sleep(1)

schedule的其它示例

import schedule
import time
def job(message='stuff'):
  print("I'm working on:", message)
#每10分钟
schedule.every(10).minutes.do(job)
#每小时
schedule.every().hour.do(job, message='things')
#每天10点30分
schedule.every().day.at("10:30").do(job)
while True:
  schedule.run_pending()
  time.sleep(1)

检查无响应进程并重启

def check_job():
  process_name = "xx.exe"
  not_respond_list = list_not_response(process_name)
  if len(not_respond_list) <= 0:
    return
  pid_params = " ".join(["/PID " + pid for pid in not_respond_list])
  os.popen("taskkill /F " + pid_params)
  if len(list_process(process_name)) <= 0:
    start_program(r'E:\xx\xx.exe')
}

查找符合条件的进程列表

def list_process(process_name, not_respond=False):
  cmd = 'tasklist /FI "IMAGENAME eq %s"'
  if not_respond:
    cmd = cmd + ' /FI "STATUS eq Not Responding"'
  output = os.popen(cmd % process_name)
  return parse_output(output.read())
def list_not_response(process_name):
  return list_process(process_name, True)

解析命令执行结果

def parse_output(output):
  print(output)
  pid_list = []
  lines = output.strip().split("\n")
  if len(lines) > 2:
    for line in lines[2:]:
      pid_list.append(line.split()[1])
  return pid_list

tasklist示例输出

映像名称            PID 会话名       会话#    内存使用
========================= ======== ================ =========== ============
WizChromeProcess.exe     1620 Console          1   32,572 K

完整代码

import os
import time
import schedule
def parse_output(output):
  print(output)
  pid_list = []
  lines = output.strip().split("\n")
  if len(lines) > 2:
    for line in lines[2:]:
      pid_list.append(line.split()[1])
  return pid_list
def list_not_response(process_name):
  return list_process(process_name, True)
def list_process(process_name, not_respond=False):
  cmd = 'tasklist /FI "IMAGENAME eq %s"'
  if not_respond:
    cmd = cmd + ' /FI "STATUS eq Not Responding"'
  output = os.popen(cmd % process_name)
  return parse_output(output.read())
def start_program(program):
  os.popen(program)
def check_job():
  process_name = "xx.exe"
  not_respond_list = list_not_response(process_name)
  if len(not_respond_list) <= 0:
    return
  pid_params = " ".join(["/PID " + pid for pid in not_respond_list])
  os.popen("taskkill /F " + pid_params)
  if len(list_process(process_name)) <= 0:
    start_program(r'E:\xxx\xx.exe')
if __name__ == '__main__':
  schedule.every(5).seconds.do(check_job)
  while True:
    schedule.run_pending()
    time.sleep(1)

总结

以上所述是小编给大家介绍的python定时检测无响应进程并重启的实例代码 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python将MongoDB里的ObjectId转换为时间戳的方法
Mar 13 Python
Python使用minidom读写xml的方法
Jun 03 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
Sep 28 Python
R vs. Python 数据分析中谁与争锋?
Oct 18 Python
python使用knn实现特征向量分类
Dec 26 Python
Python Django给admin添加Action的方法实例详解
Apr 29 Python
python实现月食效果实例代码
Jun 18 Python
Python qrcode 生成一个二维码的实例详解
Feb 12 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
Mar 12 Python
python如何从键盘获取输入实例
Jun 18 Python
简单的命令查看安装的python版本号
Aug 28 Python
Python Matplotlib绘图基础知识代码解析
Aug 31 Python
django query模块
Apr 20 #Python
不到20行代码用Python做一个智能聊天机器人
Apr 19 #Python
详解Python3 基本数据类型
Apr 19 #Python
python面向对象法实现图书管理系统
Apr 19 #Python
python远程连接MySQL数据库
Apr 19 #Python
详解Python匿名函数(lambda函数)
Apr 19 #Python
解决python3中的requests解析中文页面出现乱码问题
Apr 19 #Python
You might like
PHP5 安装方法
2007/01/15 PHP
php二维数组用键名分组相加实例函数
2013/11/06 PHP
PHP+ajax实现二级联动菜单功能示例
2018/08/10 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
五段实用的js高级技巧
2011/12/20 Javascript
ExtJS的拖拽效果示例
2013/12/09 Javascript
javascript动态添加、修改、删除对象的属性与方法详解
2014/01/27 Javascript
Javascript 学习笔记之 对象篇(二) : 原型对象
2014/06/24 Javascript
js 模式窗口(模式对话框和非模式对话框)的使用介绍
2014/07/17 Javascript
微信小程序 MINA文件结构
2016/10/17 Javascript
jquery拖动改变div大小
2017/07/04 jQuery
在vue中更换字体,本地存储字体非引用在线字体库的方法
2018/09/28 Javascript
vue+element 模态框表格形式的可编辑表单实现
2019/06/07 Javascript
解决layui表格的表头不滚动的问题
2019/09/04 Javascript
jQuery实现动态加载瀑布流
2020/09/01 jQuery
jQuery实现二级导航菜单的示例
2020/09/30 jQuery
[04:36]DOTA2国际邀请赛 ti3精彩集锦
2013/08/19 DOTA
简单谈谈Python流程控制语句
2016/12/04 Python
python多进程实现进程间通信实例
2017/11/24 Python
matplotlib中legend位置调整解析
2017/12/19 Python
Python简单计算文件MD5值的方法示例
2018/04/11 Python
Python模拟登录的多种方法(四种)
2018/06/01 Python
python web框架Flask实现图形验证码及验证码的动态刷新实例
2019/10/14 Python
Python使用matplotlib绘制Logistic曲线操作示例
2019/11/28 Python
使用opencv中匹配点对的坐标提取方式
2020/06/04 Python
python属于哪种语言
2020/08/16 Python
Auchan Direct波兰:欧尚在线杂货店
2016/10/19 全球购物
美国和加拿大房车出售在线分类广告:RVT.com
2018/04/23 全球购物
美国Curacao百货连锁店网站:iCuracao.com
2019/07/20 全球购物
英国顶尖手表珠宝品牌独家授权经销商:HS Johnson
2020/10/28 全球购物
产品促销活动策划书
2014/01/15 职场文书
公司前台辞职报告
2014/01/19 职场文书
共产党员岗位承诺书
2014/05/29 职场文书
《司马光》教学反思
2016/02/22 职场文书
Python matplotlib 利用随机函数生成变化图形
2022/04/26 Python
CSS使用SVG实现动态分布的圆环发散路径动画
2022/12/24 HTML / CSS