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中函数总结之装饰器闭包详解
Jun 12 Python
基于Python3 逗号代码 和 字符图网格(详谈)
Jun 22 Python
用Python登录好友QQ空间点赞的示例代码
Nov 04 Python
对Pandas MultiIndex(多重索引)详解
Nov 16 Python
浅谈python 导入模块和解决文件句柄找不到问题
Dec 15 Python
在python3中pyqt5和mayavi不兼容问题的解决方法
Jan 08 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
Feb 16 Python
Python jieba库用法及实例解析
Nov 04 Python
Python tkinter三种布局实例详解
Jan 06 Python
python实现手势识别的示例(入门)
Apr 15 Python
Python之京东商品秒杀的实现示例
Jan 06 Python
pytorch中的 .view()函数的用法介绍
Mar 17 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中使用Oracle数据库(2)
2006/10/09 PHP
php环境配置 php5 MySQL5 apache2 phpmyadmin安装与配置图文教程
2007/03/16 PHP
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
2012/03/05 PHP
细谈php中SQL注入攻击与XSS攻击
2012/06/10 PHP
php中过滤非法字符的具体实现
2013/10/29 PHP
PHP获取windows登录用户名的方法
2014/06/24 PHP
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
2014/09/27 PHP
PHP中使用匿名函数操作数据库的例子
2014/11/17 PHP
PHP实现linux命令tail -f
2016/02/22 PHP
Zend Framework教程之响应对象的封装Zend_Controller_Response实例详解
2016/03/07 PHP
PHP目录与文件操作技巧总结(创建,删除,遍历,读写,修改等)
2016/09/11 PHP
javascript 一段左右两边随屏滚动的代码
2009/06/18 Javascript
基于jQuery的图片不完全按比例自动缩小
2014/07/11 Javascript
详谈JavaScript 匿名函数及闭包
2014/11/14 Javascript
轮播的简单实现方法
2016/07/28 Javascript
jQuery实现简单的计时器功能实例分析
2017/08/29 jQuery
详解JavaScript中的六种错误类型
2017/09/21 Javascript
原生JS实现的简单轮播图功能【适合新手】
2018/08/17 Javascript
微信小程序带动画弹窗组件使用方法详解
2018/11/27 Javascript
详解Vue 匿名、具名和作用域插槽的使用方法
2019/04/22 Javascript
聊聊Vue中provide/inject的应用详解
2019/11/10 Javascript
跟老齐学Python之做一个小游戏
2014/09/28 Python
Python编程实现及时获取新邮件的方法示例
2017/08/10 Python
利用python将图片转换成excel文档格式
2017/12/30 Python
python实现n个数中选出m个数的方法
2018/11/13 Python
浅谈Python的条件判断语句if/else语句
2019/03/21 Python
Python终端输出彩色字符方法详解
2020/02/11 Python
GANT英国官方网上商店:甘特衬衫
2018/02/06 全球购物
英国家用电器购物网站:Hughes
2018/02/23 全球购物
英国高级健康和美容产品零售商:Life and Looks
2019/08/01 全球购物
情人节活动策划方案
2014/02/27 职场文书
村党支部群众路线教育实践活动对照检查材料
2014/09/26 职场文书
融资合作协议书范本
2014/10/17 职场文书
交通事故被告代理词
2015/05/23 职场文书
化工厂员工工作总结
2015/10/15 职场文书
CSS实现背景图片全屏铺满自适应的3种方式
2022/07/07 HTML / CSS