基于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 11 Python
python使用urllib2实现发送带cookie的请求
Apr 28 Python
Python出现segfault错误解决方法
Apr 16 Python
完美解决Python 2.7不能正常使用pip install的问题
Jun 12 Python
Python基于百度云文字识别API
Dec 13 Python
对pandas写入读取h5文件的方法详解
Dec 28 Python
Django如何使用第三方服务发送电子邮件
Aug 14 Python
Python Celery多队列配置代码实例
Nov 22 Python
在python中利用dict转json按输入顺序输出内容方式
Feb 27 Python
Django url 路由匹配过程详解
Jan 22 Python
Python使用cn2an实现中文数字与阿拉伯数字的相互转换
Mar 02 Python
Python可视化神器pyecharts绘制地理图表
Jul 07 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安装为Apache DSO
2006/10/09 PHP
php cookie 登录验证示例代码
2009/03/16 PHP
超级实用的7个PHP代码片段分享
2012/01/05 PHP
destoon官方标签大全
2014/06/20 PHP
采用memcache在web集群中实现session的同步会话
2014/07/05 PHP
php面向对象与面向过程两种方法给图片添加文字水印
2015/08/26 PHP
php实现简易聊天室应用代码
2015/09/23 PHP
PHP 自动加载的简单实现(推荐)
2016/08/12 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
2017/04/05 PHP
关于jQuery中.attr()和.prop()的问题探讨
2013/09/06 Javascript
JavaScript中实现依赖注入的思路分享
2015/01/15 Javascript
js点击文本框后才加载验证码实例代码
2015/10/20 Javascript
浅析Javascript中双等号(==)隐性转换机制
2017/10/27 Javascript
vue框架搭建之axios使用教程
2018/07/11 Javascript
vue3.0 CLI - 1 - npm 安装与初始化的入门教程
2018/09/14 Javascript
elementUI select组件默认选中效果实现的方法
2019/03/25 Javascript
python Django框架实现自定义表单提交
2016/03/25 Python
获取python文件扩展名和文件名方法
2018/02/02 Python
python  创建一个保留重复值的列表的补码
2018/10/15 Python
对python 匹配字符串开头和结尾的方法详解
2018/10/27 Python
python实现维吉尼亚算法
2019/03/20 Python
python实现复制大量文件功能
2019/08/31 Python
CSS3制作ajax loader icon实现思路及代码
2013/08/25 HTML / CSS
关于老式浏览器兼容HTML5和CSS3的问题
2016/06/01 HTML / CSS
美国高级音响品牌:Master&Dynamic
2018/07/05 全球购物
EJB的几种类型
2012/08/15 面试题
自动化职业生涯规划书范文
2014/01/03 职场文书
童装店创业计划书
2014/01/09 职场文书
写自荐信三大法宝
2014/01/24 职场文书
副董事长岗位职责
2014/04/02 职场文书
读书小明星事迹材料
2014/05/03 职场文书
七一建党日演讲稿
2014/09/05 职场文书
四风批评与自我批评范文
2014/10/14 职场文书
员工辞职信范文
2015/03/02 职场文书
2019年家电促销广告语集锦
2019/10/21 职场文书
python+opencv实现目标跟踪过程
2022/06/21 Python