基于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抓取京东商城手机列表url实例代码
Dec 18 Python
python实现的udp协议Server和Client代码实例
Jun 04 Python
Python之Web框架Django项目搭建全过程
May 02 Python
Python使用defaultdict读取文件各列的方法
May 11 Python
Python3.8中使用f-strings调试
May 22 Python
python利用dlib获取人脸的68个landmark
Nov 27 Python
Python hashlib常见摘要算法详解
Jan 13 Python
python3正则模块re的使用方法详解
Feb 11 Python
Python写出新冠状病毒确诊人数地图的方法
Feb 12 Python
用python查找统一局域网下ip对应的mac地址
Jan 13 Python
利用Python如何画一颗心、小人发射爱心
Feb 21 Python
Python实战之用tkinter库做一个鼠标模拟点击器
Apr 27 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的相似度计算函数:levenshtein的使用介绍
2013/04/15 PHP
php支持断点续传、分块下载的类
2016/05/02 PHP
php 后端实现JWT认证方法示例
2018/09/04 PHP
基于JQuery框架的AJAX实例代码
2009/11/03 Javascript
基于jQuery的js分页代码
2010/06/10 Javascript
jquery dialog键盘事件代码
2010/08/01 Javascript
apycom出品的jQuery精美菜单破解方法
2011/02/18 Javascript
潜说js对象和数组
2011/05/25 Javascript
表单切换,用回车键替换Tab健(不支持IE)
2011/07/20 Javascript
jQuery插件开发基础简单介绍
2013/01/07 Javascript
jquery使用jquery.zclip插件复制对象的实例教程
2013/12/04 Javascript
javascript中2个感叹号的用法实例详解
2014/09/04 Javascript
jQuery操作基本控件方法实例分析
2015/12/31 Javascript
js实现密码强度检测【附示例】
2016/03/30 Javascript
jQuery easyui刷新当前tabs的方法
2016/09/23 Javascript
JS常用函数和常用技巧小结
2016/10/15 Javascript
NodeJS和BootStrap分页效果的实现代码
2016/11/07 NodeJs
ES6中参数的默认值语法介绍
2017/05/03 Javascript
jQuery实现DIV响应鼠标滑过由下向上展开效果示例【测试可用】
2018/04/26 jQuery
vue实现的下拉框功能示例
2019/01/29 Javascript
原生JavaScript实现换肤
2021/02/19 Javascript
Python Flask基础教程示例代码
2018/02/07 Python
python安装pywin32clipboard的操作方法
2019/01/24 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
2020/05/25 Python
HTML5实时语音通话聊天MP3压缩传输3KB每秒
2019/08/28 HTML / CSS
华纳兄弟工作室的官方授权商店:WB Shop
2018/11/30 全球购物
What is EJB
2016/07/22 面试题
教育技术学专业职业规划书
2014/03/03 职场文书
财务部副经理岗位职责
2014/03/14 职场文书
公安局班子个人对照检查材料思想汇报
2014/10/09 职场文书
有限公司股东合作协议书
2014/10/29 职场文书
劳动者解除劳动合同通知书
2015/04/16 职场文书
golang 接口嵌套实现复用的操作
2021/04/29 Golang
深入理解Vue的数据响应式
2021/05/15 Vue.js
python高温预警数据获取实例
2022/07/23 Python