基于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 相关文章推荐
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
Apr 23 Python
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
Mar 15 Python
python 实现在Excel末尾增加新行
May 02 Python
python使用magic模块进行文件类型识别方法
Dec 08 Python
在Django model中设置多个字段联合唯一约束的实例
Jul 17 Python
django Admin文档生成器使用详解
Jul 22 Python
Python zip函数打包元素实例解析
Dec 11 Python
jupyter notebook 调用环境中的Keras或者pytorch教程
Apr 14 Python
keras和tensorflow使用fit_generator 批次训练操作
Jul 03 Python
python读取excel进行遍历/xlrd模块操作
Jul 12 Python
python爬虫中url管理器去重操作实例
Nov 30 Python
python爬虫--selenium模块
Mar 31 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
dede3.1分页文字采集过滤规则详说(图文教程)续二
2007/04/03 PHP
通过PHP的内置函数,通过DES算法对数据加密和解密
2012/06/21 PHP
关于尾递归的使用详解
2013/05/02 PHP
PHP实现加密文本文件并限制特定页面的存取的效果
2016/10/21 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
PHP7内核CGI与FastCGI详解
2019/04/14 PHP
excel操作之Add Data to a Spreadsheet Cell
2007/06/12 Javascript
javascript中substr,substring,slice.splice的区别说明
2010/11/25 Javascript
js操作iframe兼容各种主流浏览器示例代码
2013/07/22 Javascript
Javascript delete 引用类型对象
2013/11/01 Javascript
JS获取屏幕,浏览器窗口大小,网页高度宽度(实现代码)
2013/12/17 Javascript
JavaScript中的标签语句用法分析
2015/02/10 Javascript
JS中常用的输出方式(五种)
2016/06/12 Javascript
全面介绍javascript实用技巧及单竖杠
2016/07/18 Javascript
微信小程序 window_x64环境搭建
2016/09/30 Javascript
详解vue2.0脚手架的webpack 配置文件分析
2017/05/27 Javascript
JS简单实现滑动加载数据的方法示例
2017/10/18 Javascript
vue.js使用3DES加密的方法示例
2018/05/18 Javascript
基于JS判断对象是否是数组
2020/01/10 Javascript
[55:02]2014 DOTA2国际邀请赛中国区预选赛 HGT VS Orenda
2014/05/21 DOTA
深入分析在Python模块顶层运行的代码引起的一个Bug
2014/07/04 Python
详解Python中with语句的用法
2015/04/15 Python
python opencv之分水岭算法示例
2018/02/24 Python
完美解决python中ndarray 默认用科学计数法显示的问题
2018/07/14 Python
python-pyinstaller、打包后获取路径的实例
2019/06/10 Python
python使用socket实现的传输demo示例【基于TCP协议】
2019/09/24 Python
Python调用Windows命令打印文件
2020/02/07 Python
CSS3模拟IOS滑动开关效果
2016/09/28 HTML / CSS
Ryderwear美国官网:澳大利亚高端健身训练装备品牌
2018/04/24 全球购物
C#实现对任一张表的数据进行增,删,改,查要求,运用Webservice,体现出三层架构
2014/07/11 面试题
师范学院毕业生求职信范文
2013/12/26 职场文书
夏洛特的网观后感
2015/06/15 职场文书
mysql下的max_allowed_packet参数设置详解
2022/02/12 MySQL
Spring Boot DevTools 全局配置学习指南
2022/03/31 Java/Android
SONY AN-LP1 短波有源天线放大器图
2022/04/05 无线电
Vue.Draggable实现交换位置
2022/04/07 Vue.js