基于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 相关文章推荐
Windows中安装使用Virtualenv来创建独立Python环境
May 31 Python
python函数的5种参数详解
Feb 24 Python
python3.4用函数操作mysql5.7数据库
Jun 23 Python
matplotlib简介,安装和简单实例代码
Dec 26 Python
python实现音乐下载器
Apr 15 Python
对python中的for循环和range内置函数详解
Apr 17 Python
Python向excel中写入数据的方法
May 05 Python
Django model update的多种用法介绍
Mar 28 Python
Django 开发环境配置过程详解
Jul 18 Python
python实现本地批量ping多个IP的方法示例
Aug 07 Python
python shell命令行中import多层目录下的模块操作
Mar 09 Python
Python单元测试及unittest框架用法实例解析
Jul 09 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+DBM的同学录程序(2)
2006/10/09 PHP
Windows下利用Gvim写PHP产生中文乱码问题解决方法
2011/04/20 PHP
叫你如何修改Nginx与PHP的文件上传大小限制
2014/09/10 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
PHP+MySQL使用mysql_num_rows实现模糊查询图书信息功能
2018/05/31 PHP
php实现QQ小程序发送模板消息功能
2019/09/18 PHP
php的无刷新操作实现方法分析
2020/02/28 PHP
javascript对象的property和prototype是这样一种关系
2007/03/24 Javascript
jquery中dom操作和事件的实例学习 下拉框应用
2011/12/01 Javascript
js遍历td tr等html元素
2012/12/13 Javascript
JavaScript定义变量和变量优先级问题探讨
2014/10/11 Javascript
jQuery中position()方法用法实例
2015/01/16 Javascript
Jquery插件仿百度搜索关键字自动匹配功能
2016/05/11 Javascript
Bootstrap表格使用方法详解
2017/02/17 Javascript
nodejs+express搭建多人聊天室步骤
2018/02/12 NodeJs
Javascript格式化并高亮xml字符串的方法及注意事项
2018/08/13 Javascript
vue动态改变背景图片demo分享
2018/09/13 Javascript
vue实现修改图片后实时更新
2019/11/14 Javascript
JS面向对象编程——ES6 中class的继承用法详解
2020/03/03 Javascript
python 字典(dict)遍历的四种方法性能测试报告
2014/06/25 Python
Python 通过调用接口获取公交信息的实例
2018/12/17 Python
Python逐行读取文件中内容的简单方法
2019/02/26 Python
Python3实现定时任务的四种方式
2019/06/03 Python
python conda操作方法
2019/09/11 Python
python中bytes和str类型的区别
2019/10/21 Python
python错误调试及单元文档测试过程解析
2019/12/19 Python
基于python 等频分箱qcut问题的解决
2020/03/03 Python
Keras 加载已经训练好的模型进行预测操作
2020/06/17 Python
Keras保存模型并载入模型继续训练的实现
2021/02/20 Python
日语专业毕业生自荐信
2013/11/11 职场文书
红色旅游心得体会
2014/09/03 职场文书
学校领导班子群众路线整改措施
2014/09/16 职场文书
2014年纪检部工作总结
2014/11/12 职场文书
2014年小学图书室工作总结
2014/12/09 职场文书
北京故宫导游词
2015/01/31 职场文书
检讨书格式
2015/05/07 职场文书