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进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
Apr 25 Python
Python入门篇之数字
Oct 20 Python
举例介绍Python中的25个隐藏特性
Mar 30 Python
python中for语句简单遍历数据的方法
May 07 Python
Python算法应用实战之栈详解
Feb 04 Python
python 利用栈和队列模拟递归的过程
May 29 Python
Django 多环境配置详解
May 14 Python
Python udp网络程序实现发送、接收数据功能示例
Dec 09 Python
解决Jupyter-notebook不弹出默认浏览器的问题
Mar 30 Python
在pycharm中无法import所安装的库解决方案
May 31 Python
总结Python使用过程中的bug
Jun 18 Python
Python pandas之求和运算和非空值个数统计
Aug 07 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
MYSQL环境变量设置方法
2007/01/15 PHP
php 友好URL的实现(吐血推荐)
2008/10/04 PHP
PHP 字符截取 解决中文的截取问题,不用mb系列
2009/09/29 PHP
php 归并排序 数组交集
2011/05/10 PHP
centos 5.6 升级php到5.3的方法
2011/05/14 PHP
解析在zend Farmework下如何创立一个FORM表单
2013/06/28 PHP
thinkphp利用模型通用数据编辑添加和删除的实例代码
2016/11/20 PHP
PHP获取访问设备信息的方法示例
2019/02/20 PHP
Laravel向公共模板赋值方法总结
2019/06/25 PHP
laravel中Redis队列监听中断的分析
2020/09/14 PHP
Javascript 面向对象 继承
2010/05/13 Javascript
简单的jquery拖拽排序效果实现代码
2011/09/20 Javascript
理解JSON:3分钟课程
2011/10/28 Javascript
JS继承用法实例分析
2015/02/05 Javascript
原生js和jQuery实现淡入淡出轮播效果
2015/12/25 Javascript
javascript鼠标右键菜单自定义效果
2020/12/08 Javascript
jQuery调用WebMethod(PageMethod) NET2.0的方法
2016/04/15 Javascript
js实现获取两个日期之间所有日期的方法
2016/06/17 Javascript
JavaScript简单获取页面图片原始尺寸的方法
2016/06/21 Javascript
如何实现json数据可视化详解
2016/11/24 Javascript
webpack4实现不同的导出类型
2019/04/09 Javascript
jquery实现垂直手风琴导航栏
2020/02/18 jQuery
JS实现进度条动态加载特效
2020/03/25 Javascript
[05:04]完美世界携手游戏风云打造 卡尔工作室地图界面篇
2013/04/23 DOTA
python正则表达式match和search用法实例
2015/03/26 Python
举例讲解Python编程中对线程锁的使用
2016/07/12 Python
python使用pymongo操作mongo的完整步骤
2019/04/13 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
2019/11/21 Python
numpy.linalg.eig() 计算矩阵特征向量方式
2019/11/29 Python
如何将Pycharm中调整字体大小的方式设置为&quot;ctrl+鼠标滚轮上下滑&quot;
2020/11/17 Python
AHAVA美国官方网站:死海海泥护肤品牌
2016/10/18 全球购物
如何掌握自荐信格式呢
2013/11/19 职场文书
医务人员自我评价
2014/01/26 职场文书
2014年团支部工作总结
2014/11/17 职场文书
中学总务处工作总结
2015/08/12 职场文书
财务会计个人原因辞职信
2019/06/21 职场文书