基于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 client使用http post 到server端的代码
Feb 10 Python
Python使用django获取用户IP地址的方法
May 11 Python
python计算圆周率pi的方法
Jul 11 Python
使用Python求解最大公约数的实现方法
Aug 20 Python
Python时间的精准正则匹配方法分析
Aug 17 Python
教你学会使用Python正则表达式
Sep 07 Python
TensorFlow在MAC环境下的安装及环境搭建
Nov 14 Python
TensorFlow中权重的随机初始化的方法
Feb 11 Python
详解Python 解压缩文件
Apr 09 Python
利用python-docx模块写批量生日邀请函
Aug 26 Python
python datetime处理时间小结
Apr 16 Python
python中实现词云图的示例
Dec 19 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简单实现断点续传下载的方法
2015/09/25 PHP
用jQuery扩展自写的 UI导航
2010/01/13 Javascript
js创建数据共享接口——简化框架之间相互传值
2011/10/23 Javascript
拥抱模块化的JavaScript
2012/03/07 Javascript
js实现正方形颜色从下往上升的效果
2014/08/04 Javascript
jQuery实现高亮显示的方法
2015/03/10 Javascript
JavaScript中的闭包
2016/02/24 Javascript
Vue.js动态组件解析
2016/09/09 Javascript
基于Bootstrap漂亮简洁的CSS3价格表(附源码下载)
2017/02/28 Javascript
轻松理解JavaScript闭包
2017/03/14 Javascript
关于axios返回空对象的问题解决
2017/04/04 Javascript
vue+iview写个弹框的示例代码
2017/12/05 Javascript
JavaScript 五大常见函数
2018/03/23 Javascript
RequireJS用法简单示例
2018/08/20 Javascript
JavaScript设计模式之命令模式实例分析
2019/01/16 Javascript
基于jquery实现彩色投票进度条代码解析
2020/08/26 jQuery
如何在 Vue 中使用 JSX
2021/02/14 Vue.js
Python selenium 父子、兄弟、相邻节点定位方式详解
2016/09/15 Python
Python实现定时任务
2017/02/08 Python
Python入门必须知道的11个知识点
2018/03/21 Python
Python发送http请求解析返回json的实例
2018/03/26 Python
python数字图像处理之高级形态学处理
2018/04/27 Python
使用Python抓取豆瓣影评数据的方法
2018/10/17 Python
Python判断以什么结尾以什么开头的实例
2018/10/27 Python
pycharm debug功能实现跳到循环末尾的方法
2018/11/29 Python
Python中按键来获取指定的值
2019/03/02 Python
django富文本编辑器的实现示例
2019/04/10 Python
Python3 中sorted() 函数的用法
2020/03/24 Python
大四自我鉴定范文
2013/10/06 职场文书
应用电子专业学生的自我评价
2013/10/16 职场文书
鼓励运动员的广播稿
2014/02/08 职场文书
巾帼文明岗汇报材料
2014/12/24 职场文书
五年级下册复习计划
2015/01/19 职场文书
初中军训感想
2015/08/07 职场文书
Vue-Element-Admin集成自己的接口实现登录跳转
2021/06/23 Vue.js
正则表达式基础与常用验证表达式
2022/06/16 Javascript