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 判断一个进程是否存在
Apr 09 Python
总结Python编程中三条常用的技巧
May 11 Python
在Python 3中实现类型检查器的简单方法
Jul 03 Python
Python抓取电影天堂电影信息的代码
Apr 07 Python
完美解决Python2操作中文名文件乱码的问题
Jan 04 Python
python模拟登录并且保持cookie的方法详解
Apr 04 Python
有关Python的22个编程技巧
Aug 29 Python
Python 多线程其他属性以及继承Thread类详解
Aug 28 Python
Jupyter Notebook 实现正常显示中文和负号
Apr 24 Python
PyQt5 控件字体样式等设置的实现
May 13 Python
Python标准库pathlib操作目录和文件
Nov 20 Python
Python列表的索引与切片
Apr 07 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
《一拳超人》埼玉一拳下去,他们存在了800年毫无意义!
2020/03/02 日漫
ftp类(myftp.php)
2006/10/09 PHP
修改apache配置文件去除thinkphp url中的index.php
2014/01/17 PHP
php url路由入门实例
2014/04/23 PHP
PHP调用wsdl文件类型的接口代码分享
2014/11/19 PHP
PHP 验证登陆类分享
2015/03/13 PHP
讲解WordPress开发中一些常用的debug技巧
2015/12/18 PHP
PHP实现中国公民身份证号码有效性验证示例代码
2017/05/03 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
javascript中的float运算精度实例分析
2010/08/21 Javascript
js滚动条平滑移动示例代码
2016/03/29 Javascript
jQuery中通过ajax调用webservice传递数组参数的问题实例详解
2016/05/20 Javascript
JS实现的简单轮播图运动效果示例
2016/12/22 Javascript
Javascript中click与blur事件的顺序详析
2017/04/25 Javascript
浅谈vue的iview列表table render函数设置DOM属性值的方法
2017/09/30 Javascript
Vue.set()实现数据动态响应的方法
2018/02/07 Javascript
Vue.JS实现垂直方向展开、收缩不定高度模块的JS组件
2018/06/19 Javascript
基于JavaScript canvas绘制贝塞尔曲线
2018/12/25 Javascript
微信小程序-form表单提交代码实例
2019/04/29 Javascript
Vue组件间通信 Vuex的用法解析
2019/08/05 Javascript
基于JavaScript获取url参数2种方法
2020/04/17 Javascript
Python中json格式数据的编码与解码方法详解
2016/07/01 Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
2018/02/24 Python
Python回文字符串及回文数字判定功能示例
2018/03/20 Python
Python爬取成语接龙类网站
2018/10/19 Python
python+OpenCV实现车牌号码识别
2019/11/08 Python
Python爬虫程序架构和运行流程原理解析
2020/03/09 Python
澳大利亚吉他在线:Artist Guitars
2017/03/30 全球购物
失业者真诚求职信范文
2013/12/25 职场文书
网吧消防安全制度
2014/01/28 职场文书
给校长的一封检讨书
2014/09/20 职场文书
设备技术员岗位职责
2015/04/11 职场文书
导游词之重庆钓鱼城
2019/09/19 职场文书
python单元测试之pytest的使用
2021/06/07 Python
Java 使用类型为Object的变量指向任意类型的对象
2022/04/13 Java/Android
css清除浮动clearfix:after的用法详解(附完整代码)
2023/05/21 HTML / CSS