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 03 Python
python的re模块应用实例
Sep 26 Python
Python实现基本数据结构中栈的操作示例
Dec 04 Python
pandas 使用均值填充缺失值列的小技巧分享
Jul 04 Python
Python 正则表达式爬虫使用案例解析
Sep 23 Python
python下载库的步骤方法
Oct 12 Python
Python 3.8正式发布,来尝鲜这些新特性吧
Oct 15 Python
Pytorch 的损失函数Loss function使用详解
Jan 02 Python
Python continue语句实例用法
Feb 06 Python
Python bytes string相互转换过程解析
Mar 05 Python
pandas 像SQL一样使用WHERE IN查询条件说明
Jun 05 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
Jan 05 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 删除指定文件夹的实例讲解
2017/07/25 PHP
对google个性主页的拖拽效果的js的完整注释[转]
2007/04/10 Javascript
JS Timing
2007/04/21 Javascript
JavaScript 学习笔记(十一)
2010/01/19 Javascript
JQuery 文本框回车跳到下一个文本框示例代码
2013/08/30 Javascript
Javascript实现简单二级下拉菜单实例
2014/06/15 Javascript
JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性
2015/12/26 Javascript
JS中setTimeout和setInterval的最大延时值详解
2017/02/13 Javascript
Vue自定义指令详解
2017/07/28 Javascript
jQuery实现全选、反选和不选功能
2017/08/16 jQuery
使用async、enterproxy控制并发数量的方法详解
2018/01/02 Javascript
vue slots 组件的组合/分发实例
2018/09/06 Javascript
Node.js实现简单管理系统
2019/09/23 Javascript
JavaScript实现轮播图效果代码实例
2019/09/28 Javascript
VUE实现密码验证与提示功能
2019/10/18 Javascript
详解Vue2的diff算法
2021/01/06 Vue.js
Python中的字符串类型基本知识学习教程
2016/02/04 Python
更改Ubuntu默认python版本的两种方法python-&gt; Anaconda
2016/12/18 Python
python+django+sql学生信息管理后台开发
2018/01/11 Python
pycharm重置设置,恢复默认设置的方法
2018/10/22 Python
对python 合并 累加两个dict的实例详解
2019/01/21 Python
numpy 声明空数组详解
2019/12/05 Python
python之MSE、MAE、RMSE的使用
2020/02/24 Python
Python的Tqdm模块实现进度条配置
2021/02/24 Python
CSS3使用transition实现的鼠标悬停淡入淡出
2015/01/09 HTML / CSS
详解css3 flex弹性盒自动铺满写法
2020/09/17 HTML / CSS
使用HTML5中的contentEditable来将多行文本自动增高
2016/03/01 HTML / CSS
canvas实现图片镜像翻转的2种方式
2020/07/22 HTML / CSS
Spartoo芬兰:欧洲最大的网上鞋店
2016/08/28 全球购物
Structs界面控制层技术
2013/10/11 面试题
公司财务工作总结的自我评价
2013/11/23 职场文书
物业门卫岗位职责
2013/12/28 职场文书
2016干部作风整顿心得体会
2016/01/22 职场文书
Nginx解决403 forbidden的完整步骤
2021/04/01 Servers
总结Java对象被序列化的两种方法
2021/06/30 Java/Android
SpringBoot中HttpSessionListener的简单使用方式
2022/03/17 Java/Android