基于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二分法实现实例
Nov 21 Python
使用FastCGI部署Python的Django应用的教程
Jul 22 Python
玩转python爬虫之正则表达式
Feb 17 Python
Python匹配中文的正则表达式
May 11 Python
使用PyInstaller将Python程序文件转换为可执行程序文件
Jul 08 Python
利用python操作SQLite数据库及文件操作详解
Sep 22 Python
深入理解Python中的super()方法
Nov 20 Python
python类的方法属性与方法属性的动态绑定代码详解
Dec 27 Python
python 实现手机自动拨打电话的方法(通话压力测试)
Aug 08 Python
python创建学生成绩管理系统
Nov 22 Python
python神经网络编程实现手写数字识别
May 27 Python
使用pd.merge表连接出现多余行的问题解决
Jun 16 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中的超全局变量
2006/10/09 PHP
PHP 字符串 小常识
2009/06/05 PHP
php去除字符串换行符示例分享
2014/02/13 PHP
php使用memcoder将视频转成mp4格式的方法
2015/03/12 PHP
Symfony模板的快捷变量用法实例
2016/03/17 PHP
PHP生成腾讯云COS接口需要的请求签名
2018/05/20 PHP
Laravel框架生命周期与原理分析
2018/06/12 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
2019/11/23 PHP
搭建PhpStorm+PhpStudy开发环境的超详细教程
2020/09/17 PHP
js Math 对象的方法
2013/09/01 Javascript
js内置对象处理_打印学生成绩单的简单实现
2016/09/24 Javascript
JS/jquery实现一个网页内同时调用多个倒计时的方法
2017/04/27 jQuery
vue-cli项目中使用echarts图表实例
2018/10/22 Javascript
es6数据变更同步到视图层的方法
2019/03/04 Javascript
vue实现路由懒加载及组件懒加载的方式
2019/06/11 Javascript
详解element-ui表格中勾选checkbox,高亮当前行
2019/09/02 Javascript
通过JS判断网页是否为手机打开
2020/10/28 Javascript
python的Template使用指南
2014/09/11 Python
python通过装饰器检查函数参数数据类型的方法
2015/03/13 Python
Python时间的精准正则匹配方法分析
2017/08/17 Python
python语言中with as的用法使用详解
2018/02/23 Python
pandas groupby 分组取每组的前几行记录方法
2018/04/20 Python
基于python中theano库的线性回归
2018/08/31 Python
Python for循环与range函数的使用详解
2019/03/23 Python
python调试神器PySnooper的使用
2019/07/03 Python
python时间与Unix时间戳相互转换方法详解
2020/02/13 Python
python计算波峰波谷值的方法(极值点)
2020/02/18 Python
使用Python项目生成所有依赖包的清单方式
2020/07/13 Python
Django xadmin安装及使用详解
2020/10/26 Python
Python的信号库Blinker用法详解
2020/12/31 Python
HTML5的结构和语义(2):结构
2008/10/17 HTML / CSS
Evisu官方网站:日本牛仔品牌,时尚街头设计风格
2016/12/30 全球购物
凯普林包包西班牙官网:Kipling西班牙
2019/04/12 全球购物
前处理班长职位说明书
2014/03/01 职场文书
银行青年文明号事迹材料
2014/05/31 职场文书
驾驶员管理制度范本
2015/08/06 职场文书