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+Django在windows下的开发环境配置图解
Nov 11 Python
如何搜索查找并解决Django相关的问题
Jun 30 Python
python字符串排序方法
Aug 29 Python
用Python计算三角函数之acos()方法的使用
May 15 Python
Flask实现图片的上传、下载及展示示例代码
Aug 03 Python
对python中字典keys,values,items的使用详解
Feb 03 Python
Python数据类型之列表和元组的方法实例详解
Jul 08 Python
python基于FTP实现文件传输相关功能代码实例
Sep 28 Python
Python中itertools的用法详解
Feb 07 Python
python+selenium 脚本实现每天自动登记的思路详解
Mar 11 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
Jun 14 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
Jul 20 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下载远程文件类(支持断点续传)
2008/11/14 PHP
基于HTTP长连接的&quot;服务器推&quot;技术的php 简易聊天室
2009/10/31 PHP
zend framework框架中url大小写问题解决方法
2014/08/19 PHP
PHP简单实现图片格式转换(jpg转png,gif转png等)
2019/10/30 PHP
详细讲解JS节点知识
2010/01/31 Javascript
JavaScript中继承的一些示例方法与属性参考
2010/08/07 Javascript
js页面跳转常用的几种方式
2010/11/25 Javascript
用JS控制回车事件的代码
2011/02/20 Javascript
Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
2011/03/12 Javascript
JS图片根据鼠标滚动延时加载的实例代码
2013/07/13 Javascript
Js nodeType 属性全面解析
2013/11/14 Javascript
JavaScript利用append添加元素报错的解决方法
2014/07/01 Javascript
node.js中的fs.createReadStream方法使用说明
2014/12/17 Javascript
JS实现仿新浪微博发布内容为空时提示功能代码
2015/08/19 Javascript
用iframe实现不刷新整个页面上传图片的实例
2016/11/18 Javascript
Angular2利用组件与指令实现图片轮播组件
2017/03/27 Javascript
CentOS环境中MySQL修改root密码方法
2018/01/07 Javascript
Vue实现用户自定义字段显示数据的方法
2018/08/28 Javascript
Vue实现移动端页面切换效果【推荐】
2018/11/13 Javascript
如何利用vue+vue-router+elementUI实现简易通讯录
2019/05/13 Javascript
layui时间控件选择时间范围的实现方法
2019/09/28 Javascript
vue 判断元素内容是否超过宽度的方式
2020/07/29 Javascript
如何使用jQuery操作Cookies方法解析
2020/09/08 jQuery
[53:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第一场 1月31日
2021/03/11 DOTA
Python函数嵌套实例
2014/09/23 Python
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
在PyCharm中安装PaddlePaddle的方法
2021/02/05 Python
CSS3按钮鼠标悬浮实现光圈效果源码
2016/09/11 HTML / CSS
HTML5使用ApplicationCache接口实现离线缓存技术解决离线难题
2012/12/13 HTML / CSS
美国女孩服装购物网站:Justice
2017/03/04 全球购物
新西兰便宜隐形眼镜购买网站:QUICKLENS New Zealand
2019/03/02 全球购物
一个精品风格的世界:Atterley
2019/05/01 全球购物
人力资源管理专业应届生求职信
2014/04/24 职场文书
幼儿园园长新年寄语2015
2014/12/08 职场文书
2015年学生会个人工作总结
2015/04/09 职场文书
保安辞职申请书应该怎么写?
2019/07/15 职场文书