基于python监控程序是否关闭


Posted in Python onJanuary 14, 2020

这篇文章主要介绍了基于python监控程序是否关闭,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

监控一个服务系exe在他关闭后打印,原想可以使用win32process.EnumProcesses()来获取所有程序pid,再根据pid获取的进程名进行对比,来判断程序是否关闭,但遇到个问题,我无法根据pid获取到进程名,除非使用psutil包,可这样又让自己的程序过于臃肿,我又想到去查找c++的例子希望可以得到一些帮助,然而c++的api函数在python中并不存在,我之前遇到这种问题基本都使用wmi去解决的。

import wmi
   c = wmi.WMI()
   for process in c.Win32_Process():
     print process.ProcessId, process.Name

但wmi的速度可是出奇的慢,实在不适合,

最后我在外面找到个例子,可以很好的解决该问题

from win32com.client import GetObject
  _wmi = GetObject('winmgmts:')

  # collect all the running processes
  processes = _wmi.ExecQuery('Select * from win32_process')
  for p in processes:

      print((p.ProcessId, p.ExecutablePath, p.CommandLine, p.Name))

由此全部代码为
def wmi_sql_all_name(pname):#全部程序列表
  from win32com.client import GetObject
  _wmi = GetObject('winmgmts:')
  processes = _wmi.ExecQuery('Select * from win32_process')
  for p in processes:
    if p.name==pname:
      return p.ProcessId
def process_restat(pname):
  import win32security, win32event#-----------------------------------------获取令牌
  hToken = win32security.OpenProcessToken(win32api.GetCurrentProcess(),
                      win32con.TOKEN_ADJUST_PRIVILEGES | win32con.TOKEN_QUERY) # 打开自己的程序令牌
  luid = win32security.LookupPrivilegeValue(None, 'SeDebugPrivilege') # 查看自己的权限,并写入权限关键字
  PyTOKEN = ((luid, win32con.SE_PRIVILEGE_ENABLED),) # 将这些做成序列用做参数
  pyt1 = win32security.AdjustTokenPrivileges(hToken, 0, PyTOKEN) # 权限写入#----------------------------------------
  processid=wmi_sql_all_name(pname)
  if processid!= None:
    hprocess = win32api.OpenProcess(win32con.PROCESS_ALL_ACCESS, False, processid)
    win32event.WaitForSingleObject(hprocess, -1)
    win32api.CloseHandle(hprocess)
    print U'已关闭'
  else:
    print u'未启动'

首先需要获取令牌,否则获取很多服务或者系统进程的信息都会报权限不足

使用OpenProcess得到程序句柄,

使用WaitForSingleObject得到程序的已通知状态也就是运行状态,第二参数为等待时间 -1 为永久等待

注意该函数会死锁线程,但不会占用cpu,很适合丢在子线程里,比无限循环跑程序列表要有效率得多

-------------------

突然想到有sql语句了 我为啥还要循环呢?

def wmi_sql_all_name(pname):
  from win32com.client import GetObject

  _wmi = GetObject('winmgmts:')
  processes = _wmi.ExecQuery("Select * from win32_process where name= '%s'"%(pname))
  try:
    return processes[0].ProcessId
  except:
    print u"没有发现程序"
    return None

将wmi_sql_all_name方法改为以以上

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python用于url解码和中文解析的小脚本(python url decoder)
Aug 11 Python
详细讲解用Python发送SMTP邮件的教程
Apr 29 Python
Anaconda多环境多版本python配置操作方法
Sep 12 Python
Python字符串格式化%s%d%f详解
Feb 02 Python
使用Scrapy爬取动态数据
Oct 21 Python
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
Feb 12 Python
Python从函数参数类型引出元组实例分析
May 28 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
May 20 Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
Jul 13 Python
在 Windows 下搭建高效的 django 开发环境的详细教程
Jul 27 Python
PyQt5的QWebEngineView使用示例
Oct 20 Python
pandas 按日期范围筛选数据的实现
Feb 20 Python
关于pytorch中全连接神经网络搭建两种模式详解
Jan 14 #Python
使用Pytorch来拟合函数方式
Jan 14 #Python
pytorch 模拟关系拟合——回归实例
Jan 14 #Python
PyTorch实现AlexNet示例
Jan 14 #Python
Pytorch 实现focal_loss 多类别和二分类示例
Jan 14 #Python
Python实现钉钉订阅消息功能
Jan 14 #Python
Python Tensor FLow简单使用方法实例详解
Jan 14 #Python
You might like
PHP has encountered an Access Violation
2007/01/15 PHP
php实现文件下载(支持中文文名)
2013/12/04 PHP
CodeIgniter配置之SESSION用法实例分析
2016/01/19 PHP
PHP 读取大文件并显示的简单实例(推荐)
2016/08/12 PHP
javascript 兼容FF的onmouseenter和onmouseleave的代码
2008/07/19 Javascript
ExtJs默认的字体大小改变的几种方法(自己整理)
2013/04/18 Javascript
js Object2String方便查看js对象内容
2014/11/24 Javascript
浅谈JS运算符&&和|| 及其优先级
2016/08/10 Javascript
学习vue.js条件渲染
2016/12/03 Javascript
微信小程序 本地数据存储实例详解
2017/04/13 Javascript
详解如何提高 webpack 构建 Vue 项目的速度
2017/07/03 Javascript
微信小程序如何使用globalData的方法
2019/06/06 Javascript
javascript操作元素的常见方法小结
2019/11/13 Javascript
[32:30]夜魇凡尔赛茶话会 第一期01:谁是卧底
2021/03/11 DOTA
Ruby元编程基础学习笔记整理
2016/07/02 Python
Python使用Matplotlib实现雨点图动画效果的方法
2017/12/23 Python
Python机器学习之K-Means聚类实现详解
2018/02/22 Python
详解Python判定IP地址合法性的三种方法
2018/03/06 Python
Flask之flask-session的具体使用
2018/07/26 Python
python实现AES加密和解密
2019/03/27 Python
python 回溯法模板详解
2020/02/26 Python
pytorch 实现L2和L1正则化regularization的操作
2021/03/03 Python
印度最大的旅游网站:MakeMyTrip
2016/10/05 全球购物
马耳他航空公司官方网站:Air Malta
2019/05/15 全球购物
C语言开发工程师测试题
2016/12/20 面试题
护理学专业推荐信
2013/12/03 职场文书
直接有效的自我评价
2014/01/11 职场文书
入党申请自荐书范文
2014/02/11 职场文书
老龄工作先进事迹
2014/08/15 职场文书
员工团队活动方案
2014/08/28 职场文书
在宿舍喝酒的检讨书
2014/09/28 职场文书
2015年电教工作总结
2015/05/26 职场文书
药品销售员2015年终工作总结
2015/10/22 职场文书
大队委员竞选稿
2015/11/20 职场文书
使用Apache Camel表达REST服务的方法
2022/06/10 Servers
mysql实现将字符串字段转为数字排序或比大小
2022/06/14 MySQL