基于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的一些用法分享
Oct 07 Python
Python脚本简单实现打开默认浏览器登录人人和打开QQ的方法
Apr 12 Python
Python视频爬虫实现下载头条视频功能示例
May 07 Python
Python中return self的用法详解
Jul 27 Python
python3.6.3安装图文教程 TensorFlow安装配置方法
Jun 24 Python
python3使用pandas获取股票数据的方法
Dec 22 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
Feb 22 Python
python调用webservice接口的实现
Jul 12 Python
Python + Requests + Unittest接口自动化测试实例分析
Dec 12 Python
python中安装django模块的方法
Mar 12 Python
python实现单机五子棋
Aug 28 Python
pip/anaconda修改镜像源,加快python模块安装速度的操作
Mar 04 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
业余方法DIY电子管FM收音机
2021/03/02 无线电
php仿ZOL分页类代码
2008/10/02 PHP
php实现通过cookie换肤的方法
2015/07/13 PHP
PHP查看SSL证书信息的方法
2016/09/22 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
2017/03/28 PHP
jQuery 类twitter的文本字数限制带提示效果插件
2010/04/16 Javascript
jQuery总体架构的理解分析
2011/03/07 Javascript
jQuery load方法用法集锦
2011/12/06 Javascript
JQuery中clone方法复制节点
2015/05/18 Javascript
jQuery Ajax页面局部加载方法汇总
2016/06/02 Javascript
AngularJS ng-bind-template 指令详解
2016/07/30 Javascript
基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)
2016/09/02 Javascript
JavaScript正则表达式和级联效果
2017/09/14 Javascript
js实现以最简单的方式将数组元素添加到对象中的方法
2017/12/20 Javascript
Vue2.0仿饿了么webapp单页面应用详细步骤
2018/07/08 Javascript
Flutter部件内部状态管理小结之实现Vue的v-model功能
2019/06/11 Javascript
vue.js路由mode配置之去掉url上默认的#方法
2019/11/01 Javascript
VUE 动态组件的应用案例分析
2019/12/02 Javascript
JavaScript oncopy事件用法实例解析
2020/05/13 Javascript
Python计算程序运行时间的方法
2014/12/13 Python
简单掌握Python中glob模块查找文件路径的用法
2016/07/05 Python
flask + pymysql操作Mysql数据库的实例
2017/11/13 Python
Python3读取Excel数据存入MySQL的方法
2018/05/04 Python
Python XlsxWriter模块Chart类用法实例分析
2019/03/11 Python
Python使用struct处理二进制(pack和unpack用法)
2020/11/12 Python
英国领先的酒类网上商城:TheDrinkShop
2017/03/16 全球购物
美国时尚假发购物网站:Wigsbuy
2019/04/06 全球购物
大学生实习自我鉴定
2013/12/11 职场文书
优秀毕业自我鉴定
2014/02/15 职场文书
学校元旦晚会方案
2014/02/19 职场文书
《记金华的双龙洞》教学反思
2014/04/19 职场文书
感恩祖国演讲稿
2014/09/09 职场文书
2015年高中班主任工作总结
2015/04/30 职场文书
教师调动申请报告
2015/05/18 职场文书
每日六道java新手入门面试题,通往自由的道路
2021/06/30 Java/Android
Python如何快速找到多个字典中的公共键(key)
2022/04/29 Python