基于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高并发异步服务器核心库forkcore使用方法
Nov 26 Python
Python Web编程之WSGI协议简介
Jul 18 Python
Python requests库用法实例详解
Aug 14 Python
使用tensorflow实现线性svm
Sep 07 Python
python异步实现定时任务和周期任务的方法
Jun 29 Python
python按比例随机切分数据的实现
Jul 11 Python
python实现发送form-data数据的方法详解
Sep 27 Python
基于python实现雪花算法过程详解
Nov 16 Python
Django集成celery发送异步邮件实例
Dec 17 Python
python+tifffile之tiff文件读写方式
Jan 13 Python
python3.6.5基于kerberos认证的hive和hdfs连接调用方式
Jun 06 Python
Python批量删除mysql中千万级大量数据的脚本分享
Dec 03 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
nginx+php-fpm配置文件的组织结构介绍
2012/11/07 PHP
Drupal7连接多个数据库及常见问题解决
2014/03/02 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
2014/05/06 PHP
ThinkPHP字符串函数及常用函数汇总
2014/07/18 PHP
php自动更新版权信息显示的方法
2015/06/19 PHP
php批量删除操作(数据访问)
2017/05/23 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
2019/03/25 PHP
解决Laravel自定义类引入和命名空间的问题
2019/10/15 PHP
使用JavaScript 实现各种跨域的方法
2013/05/08 Javascript
Javascript 多浏览器兼容总结(实战经验)
2013/10/30 Javascript
jquery制作居中遮罩层效果分享
2014/02/21 Javascript
JavaScript中常用的六种互动方法示例
2015/03/13 Javascript
简介可以自动完成UI的AngularJS工具angular-smarty
2015/06/23 Javascript
多个js毫秒倒计时同时进行效果
2016/01/05 Javascript
纯JS打造网页中checkbox和radio的美化效果
2016/10/13 Javascript
JS制作适用于手机和电脑的通知信息效果
2016/10/28 Javascript
原生JS实现小小的音乐播放器
2017/10/16 Javascript
JavaScript时间戳与时间日期间相互转换
2017/12/11 Javascript
原生js实现form表单序列化的方法
2018/08/02 Javascript
vue 表单之通过v-model绑定单选按钮radio
2019/05/13 Javascript
layui table 表格上添加日期控件的两种方法
2019/09/28 Javascript
一文秒懂JavaScript构造函数、实例、原型对象以及原型链
2020/08/25 Javascript
[01:23:45]DOTA2-DPC中国联赛 正赛 CDEC vs Dragon BO3 第一场 1月22日
2021/03/11 DOTA
Python实现Mysql数据库连接池实例详解
2017/04/11 Python
python遍历小写英文字母的方法
2019/01/02 Python
python输出pdf文档的实例
2020/02/13 Python
python接入支付宝的实例操作
2020/07/20 Python
python中time tzset()函数实例用法
2021/02/18 Python
浅析python连接数据库的重要事项
2021/02/22 Python
html5应用缓存_动力节点Java学院整理
2017/07/13 HTML / CSS
《童年》教学反思
2014/02/18 职场文书
文明寄语大全
2014/04/11 职场文书
终止或解除劳动合同及劳动关系的证明书
2014/10/06 职场文书
2014年公务员工作总结
2014/11/18 职场文书
开除员工通知
2015/04/22 职场文书