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 03 Python
Windows下安装python2.7及科学计算套装
Mar 05 Python
利用Python开发微信支付的注意事项
Aug 19 Python
Python实现判断并移除列表指定位置元素的方法
Apr 13 Python
使用Python处理Excel表格的简单方法
Jun 07 Python
win10系统下Anaconda3安装配置方法图文教程
Sep 19 Python
Django ORM 自定义 char 类型字段解析
Aug 09 Python
python提取照片坐标信息的实例代码
Aug 14 Python
Python实现使用dir获取类的方法列表
Dec 24 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
Feb 17 Python
python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件
Feb 26 Python
Python接口测试数据库封装实现原理
May 09 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
最新制作ThinkPHP3.2.3完全开发手册
2015/11/23 PHP
PHP API接口必备之输出json格式数据示例代码
2017/06/27 PHP
PHP substr()函数参数解释及用法讲解
2017/11/23 PHP
php生成二维码不保存服务器还有下载功能的实现代码
2018/08/09 PHP
PHP crc32()函数讲解
2019/02/14 PHP
一段实时更新的时间代码
2006/07/07 Javascript
JavaScript 继承的实现
2009/07/09 Javascript
jQuery 表单验证扩展代码(二)
2010/10/20 Javascript
JavaScript面向对象程序设计三 原型模式(上)
2011/12/21 Javascript
JS中的this变量的使用介绍
2013/10/21 Javascript
javascript间隔定时器(延时定时器)学习 间隔调用和延时调用
2014/01/13 Javascript
Nodejs学习item【入门手上】
2016/05/05 NodeJs
React Native 截屏组件的示例代码
2017/12/06 Javascript
D3.js实现简洁实用的动态仪表盘的示例
2018/04/04 Javascript
详解基于Vue2.0实现的移动端弹窗(Alert, Confirm, Toast)组件
2018/08/02 Javascript
解决jquery的ajax调取后端数据成功却渲染失败的问题
2018/08/08 jQuery
vue自定义全局共用函数详解
2018/09/18 Javascript
如何换个角度使用VUE过滤器详解
2019/09/11 Javascript
Python下的Mysql模块MySQLdb安装详解
2014/04/09 Python
python导入时小括号大作用
2017/01/10 Python
Java分治归并排序算法实例详解
2017/12/12 Python
快速解决安装python没有scripts文件夹的问题
2018/04/03 Python
Python开发最牛逼的IDE——pycharm
2018/08/01 Python
python 使用pandas计算累积求和的方法
2019/02/08 Python
PyCharm搭建Spark开发环境实现第一个pyspark程序
2019/06/13 Python
python输入多行字符串的方法总结
2019/07/02 Python
python利用tkinter实现屏保
2019/07/30 Python
python实现猜拳小游戏
2020/04/05 Python
python ctypes库2_指定参数类型和返回类型详解
2019/11/19 Python
python程序如何进行保存
2020/07/03 Python
Python 实现图片转字符画的示例(静态图片,gif皆可)
2020/11/05 Python
Super-Pharm波兰:药房和香水在一个地方
2020/08/18 全球购物
酒吧副总经理岗位职责
2013/12/10 职场文书
说谎欺骗人检讨书300字
2014/11/18 职场文书
团委副书记工作总结
2015/08/14 职场文书
《称赞》教学反思
2016/02/17 职场文书