基于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的框架下的web app的详细教程
Apr 30 Python
详解Python验证码识别
Jan 25 Python
python监控文件或目录变化
Jun 07 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
Apr 19 Python
Python操作MySQL模拟银行转账
Mar 12 Python
Python使用folium excel绘制point
Jan 03 Python
Python使用dict.fromkeys()快速生成一个字典示例
Apr 24 Python
实例详解Matlab 与 Python 的区别
Apr 26 Python
Python实现Linux监控的方法
May 16 Python
使用django实现一个代码发布系统
Jul 18 Python
PyTorch的Optimizer训练工具的实现
Aug 18 Python
python3跳出一个循环的实例操作
Aug 18 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
Godaddy空间Zend Optimizer升级方法
2010/05/10 PHP
PHP+JS三级菜单联动菜单实现方法
2016/02/24 PHP
php 的反射详解及示例代码
2016/08/25 PHP
PHP simplexml_import_dom()函数讲解
2019/02/03 PHP
基于PHP实现用户在线状态检测
2020/11/10 PHP
JS 判断undefined的实现代码
2009/11/26 Javascript
关于Jqzoom的使用心得 jquery放大镜效果插件
2010/04/12 Javascript
jquery tab插件制作实现代码
2010/06/22 Javascript
js中浮点型运算BUG的解决方法说明
2014/01/06 Javascript
jQuery中first()方法用法实例
2015/01/06 Javascript
JavaScript操作XML/HTML比较常用的对象属性集锦
2015/10/30 Javascript
AngularJS表单基本操作
2017/01/09 Javascript
Vue 2.0 服务端渲染入门介绍
2017/03/29 Javascript
jQuery实现简单的抽奖游戏
2017/05/05 jQuery
基于jQuery的表单填充实例
2017/08/22 jQuery
H5+C3+JS实现双人对战五子棋游戏(UI篇)
2020/05/28 Javascript
vue使用vuex实现首页导航切换不同路由的方法
2019/05/08 Javascript
使用jQuery实现购物车
2020/10/29 jQuery
Python实现Linux命令xxd -i功能
2016/03/06 Python
python编写Logistic逻辑回归
2020/12/30 Python
DES加密解密算法之python实现版(图文并茂)
2018/12/06 Python
Pycharm保存不能自动同步到远程服务器的解决方法
2019/06/27 Python
pycharm设置python文件模板信息过程图解
2020/03/10 Python
Python requests接口测试实现代码
2020/09/08 Python
Canvas制作的下雨动画的示例
2018/03/06 HTML / CSS
台湾饭店和机票预订网站:Expedia台湾
2016/08/05 全球购物
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
物业管理毕业生个人的求职信
2013/11/30 职场文书
电钳工人个人求职信
2014/05/10 职场文书
2014年冬季防火方案
2014/05/21 职场文书
危货运输企业安全生产责任书
2014/07/28 职场文书
就业推荐表自我评价范文
2015/03/02 职场文书
MySQL中日期型单行函数代码详解
2021/06/21 MySQL
CSS实现章节添加自增序号的方法
2021/06/23 HTML / CSS
Python面向对象之成员相关知识总结
2021/06/24 Python
CSS控制继承中的height能变为可继承吗
2022/06/10 HTML / CSS