基于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统计cpu利用率的方法
Jun 02 Python
Python判断直线和矩形是否相交的方法
Jul 14 Python
Python设计模式编程中解释器模式的简单程序示例分享
Mar 02 Python
基于python log取对数详解
Jun 08 Python
关于python2 csv写入空白行的问题
Jun 22 Python
python实现决策树分类
Aug 30 Python
使用python将图片格式转换为ico格式的示例
Oct 22 Python
Python 自动登录淘宝并保存登录信息的方法
Sep 04 Python
python3.8.1+selenium实现登录滑块验证功能
May 22 Python
Anaconda+vscode+pytorch环境搭建过程详解
May 25 Python
Python接口测试环境搭建过程详解
Jun 29 Python
利用python爬取有道词典的方法
Dec 08 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中file_exists与is_file,is_dir的区别介绍
2012/09/12 PHP
php+jQuery+Ajax实现点赞效果的方法(附源码下载)
2020/07/21 PHP
基于PHP-FPM进程池探秘
2017/10/17 PHP
js function使用心得
2010/05/10 Javascript
javascript new后的constructor属性
2010/08/05 Javascript
ASP.NET中基于JQUERY的高性能的TreeView补充
2011/02/23 Javascript
js动态加载以及确定加载完成的代码
2011/07/31 Javascript
js constructor的实际作用分析
2011/11/15 Javascript
jquery全选checkBox功能实现代码(取消全选功能)
2013/12/10 Javascript
js 通过html()及text()方法获取并设置p标签的显示值
2014/05/14 Javascript
深入理解JavaScript系列(44):设计模式之桥接模式详解
2015/03/04 Javascript
javascript闭包(Closure)用法实例简析
2015/11/30 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
2016/04/29 Javascript
JavaScript中的继承之类继承
2016/05/01 Javascript
详解BootStrap中Affix控件的使用及保持布局的美观的方法
2016/07/08 Javascript
js实现点击图片自动提交action的简单方法
2016/10/16 Javascript
使用BootStrap实现标签切换原理解析
2017/03/14 Javascript
Nuxt.js SSR与权限验证的实现
2018/11/21 Javascript
JS自定义对象创建与简单使用方法示例
2020/01/15 Javascript
Python自定义线程类简单示例
2018/03/23 Python
python实现屏保程序(适用于背单词)
2019/07/30 Python
python3 写一个WAV音频文件播放器的代码
2019/09/27 Python
基于Django统计博客文章阅读量
2019/10/29 Python
wxpython绘制圆角窗体
2019/11/18 Python
pygame实现弹球游戏
2020/04/14 Python
使用CSS3的appearance属性改变元素的外观的方法
2015/12/12 HTML / CSS
HTML5适合的情人节礼物有纪念日期功能
2021/01/25 HTML / CSS
东芝官网商城:还原日式美学,打造美好生活
2018/12/27 全球购物
三星加拿大官方网上商店:Samsung CA
2020/12/18 全球购物
酒店开业庆典策划方案
2014/05/28 职场文书
人事任命书范文
2014/06/04 职场文书
2014年局领导班子自身建设情况汇报
2014/11/21 职场文书
党员个人年度总结
2015/02/14 职场文书
pytorch 如何使用float64训练
2021/05/24 Python
一次项目中Thinkphp绕过禁用函数的实战记录
2021/11/17 PHP
如何优化vue打包文件过大
2022/04/13 Vue.js