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实现多线程的两种方式
May 22 Python
python网络爬虫学习笔记(1)
Apr 09 Python
python pandas库的安装和创建
Jan 10 Python
pyqt5 键盘监听按下enter 就登陆的实例
Jun 25 Python
Python函数装饰器原理与用法详解
Aug 16 Python
Django模板语言 Tags使用详解
Sep 09 Python
Python的赋值、深拷贝与浅拷贝的区别详解
Feb 12 Python
Python 实现日志同时输出到屏幕和文件
Feb 19 Python
浅谈numpy中函数resize与reshape,ravel与flatten的区别
Jun 18 Python
Python如何爬取b站热门视频并导入Excel
Aug 10 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
Sep 04 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
Feb 03 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
php+mysql+jquery实现简易的检索自动补全提示功能
2017/04/15 PHP
PHP生成二维码与识别二维码的方法详解【附源码下载】
2019/03/07 PHP
学习YUI.Ext 第七天--关于View&amp;JSONView
2007/03/10 Javascript
$.ajax json数据传递方法
2008/11/19 Javascript
jQuery库与其他JS库冲突的解决办法
2010/02/07 Javascript
手把手教你自己写一个js表单验证框架的方法
2010/09/14 Javascript
javascript中的return和闭包函数浅析
2014/06/06 Javascript
js中的json对象详细介绍
2014/10/29 Javascript
jquery处理json对象
2014/11/03 Javascript
基于JavaScript短信验证码如何实现
2016/01/24 Javascript
AngularJS中的API(接口)简单实现
2016/07/28 Javascript
JavaScript用JSONP跨域请求数据实例详解
2017/01/06 Javascript
详解jQuery事件
2017/01/13 Javascript
Angular学习教程之RouterLink花式跳转
2018/05/03 Javascript
详解在不使用ssr的情况下解决Vue单页面SEO问题
2018/11/08 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
2019/04/24 Javascript
小程序开发踩坑:页面窗口定位(相对于浏览器定位)(推荐)
2019/04/25 Javascript
JavaScript中常用的3种弹出提示框(alert、confirm、prompt)
2020/11/10 Javascript
[01:32]2016国际邀请赛中国区预选赛IG战队首日赛后采访
2016/06/27 DOTA
分享一个简单的python读写文件脚本
2017/11/25 Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
2019/03/05 Python
Python 2/3下处理cjk编码的zip文件的方法
2019/04/26 Python
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
2019/05/08 Python
numpy中的ndarray方法和属性详解
2019/05/27 Python
Python使用ElementTree美化XML格式的操作
2020/03/06 Python
python实现猜数游戏
2020/03/27 Python
python和js交互调用的方法
2020/06/23 Python
css3实现圆锥渐变conic-gradient效果
2020/02/12 HTML / CSS
探索HTML5本地存储功能运用技巧
2016/03/02 HTML / CSS
小学教研工作制度
2014/01/15 职场文书
剪枝的学问教学反思
2014/02/07 职场文书
节约粮食标语
2014/06/18 职场文书
地理科学专业自荐信
2014/09/01 职场文书
教师聘用意向书
2015/05/11 职场文书
gateway与spring-boot-starter-web冲突问题的解决
2021/07/16 Java/Android
ubuntu下常用apt命令介绍
2022/06/05 Servers