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更新列表的方法
Jul 28 Python
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
Jul 06 Python
windows下安装Python的XlsxWriter模块方法
May 03 Python
Python使用pyshp库读取shapefile信息的方法
Dec 29 Python
django页面跳转问题及注意事项
Jul 18 Python
Python使用Turtle库绘制一棵西兰花
Nov 23 Python
python数据库编程 ODBC方式实现通讯录
Mar 27 Python
python模拟斗地主发牌
Apr 22 Python
简单了解python列表和元组的区别
May 14 Python
python将字典内容写入json文件的实例代码
Aug 12 Python
python绘制趋势图的示例
Sep 17 Python
Python采集壁纸并实现炫轮播
Apr 30 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新手上路(六)
2006/10/09 PHP
php格式化金额函数分享
2015/02/02 PHP
php调整服务器时间的方法
2015/04/03 PHP
Zend Framework分页类用法详解
2016/03/22 PHP
Javascript调试工具(下载)
2007/01/09 Javascript
初探jquery——表单应用范例
2007/02/20 Javascript
js对象的构造和继承实现代码
2010/12/05 Javascript
JavaScript控制Session操作方法
2013/01/17 Javascript
jquery隐藏标签和显示标签的实例
2013/11/11 Javascript
JavaScript按位运算符的应用简析
2014/02/04 Javascript
javascript 实现子父窗体互相传值的简单实例
2014/02/17 Javascript
jQuery+ajax实现鼠标单击修改内容的方法
2014/06/27 Javascript
一个字符串反转函数可实现字符串倒序
2014/09/15 Javascript
JavaScript模拟重力状态下抛物运动的方法
2015/03/03 Javascript
js实现对ajax请求面向对象的封装
2016/01/08 Javascript
javascript自动切换焦点控制效果完整实例
2016/02/02 Javascript
关于RequireJS的简单介绍即使用方法
2016/10/20 Javascript
Angular.js实现获取验证码倒计时60秒按钮的简单方法
2017/10/18 Javascript
vue 使用ref 让父组件调用子组件的方法
2018/02/08 Javascript
JavaScript实现JSON合并操作示例【递归深度合并】
2018/09/07 Javascript
ES6 如何改变JS内置行为的代理与反射
2019/02/11 Javascript
jquery 键盘事件 keypress() keydown() keyup()用法总结
2019/10/23 jQuery
VUE 解决mode为history页面为空白的问题
2019/11/01 Javascript
Windows下用py2exe将Python程序打包成exe程序的教程
2015/04/08 Python
opencv调整图像亮度对比度的示例代码
2019/09/27 Python
python实现KNN分类算法
2019/10/16 Python
python给list排序的简单方法
2020/12/10 Python
html通过canvas转成base64的方法
2019/07/18 HTML / CSS
用HTML5实现网站在windows8中贴靠的方法
2013/04/21 HTML / CSS
德国旅游网站:weg.de
2018/06/03 全球购物
波兰最大的电商平台:Allegro.pl
2021/02/06 全球购物
大一新生学期自我评价
2014/04/09 职场文书
特教教师先进事迹
2014/05/21 职场文书
推广普通话的宣传语
2015/07/13 职场文书
Redis高可用集群redis-cluster详解
2022/03/20 Redis
解决xampp安装后Apache无法启动
2022/03/21 Servers