基于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实现的二叉树算法和kmp算法实例
Apr 25 Python
Python wxPython库使用wx.ListBox创建列表框示例
Sep 03 Python
python 返回列表中某个值的索引方法
Nov 07 Python
python 用for循环实现1~n求和的实例
Feb 01 Python
python 计算平均平方误差(MSE)的实例
Jun 29 Python
详解Matplotlib绘图之属性设置
Aug 23 Python
python连接PostgreSQL过程解析
Feb 09 Python
python str字符串转uuid实例
Mar 03 Python
更新升级python和pip版本后不生效的问题解决
Apr 17 Python
python缩进长度是否统一
Aug 02 Python
python 中的@运算符使用
May 26 Python
python用tkinter开发的扫雷游戏
Jun 01 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中十六进制颜色与RGB颜色值互转的方法
2019/03/18 PHP
Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法
2019/04/02 PHP
PHP面向对象程序设计重载(overloading)操作详解
2019/06/13 PHP
juqery 学习之六 CSS--css、位置、宽高
2011/02/11 Javascript
实测jquery data()如何存值
2013/08/18 Javascript
JQuery实现点击div以外的位置隐藏该div窗口
2013/09/13 Javascript
鼠标拖动实现DIV排序示例代码
2013/10/14 Javascript
js中arguments,caller,callee,apply的用法小结
2014/01/28 Javascript
jQuery中hide()方法用法实例
2014/12/24 Javascript
jQuery中width()方法用法实例
2014/12/24 Javascript
js实现浮动在网页右侧的简洁QQ在线客服代码
2015/09/04 Javascript
浅谈JavaScript对象的创建方式
2016/06/13 Javascript
Vue filters过滤器的使用方法
2017/07/14 Javascript
详解Vue-cli代理解决跨域问题
2017/09/27 Javascript
微信小程序仿朋友圈发布动态功能
2018/07/15 Javascript
浅谈开发eslint规则
2018/10/01 Javascript
layui监听单元格编辑前后交互的例子
2019/09/16 Javascript
TensorFlow.js 微信小程序插件开始支持模型缓存的方法
2020/02/21 Javascript
javascript实现京东登录显示隐藏密码
2020/08/02 Javascript
vue单元格多列合并的实现
2020/11/26 Vue.js
python判断windows隐藏文件的方法
2014/03/21 Python
python实现web方式logview的方法
2015/08/10 Python
Python基于matplotlib实现绘制三维图形功能示例
2018/01/18 Python
解决python nohup linux 后台运行输出的问题
2018/05/11 Python
Python使用logging模块实现打印log到指定文件的方法
2018/09/05 Python
win10下python3.5.2和tensorflow安装环境搭建教程
2018/09/19 Python
Pandas读写CSV文件的方法示例
2019/03/27 Python
python实现随机漫步方法和原理
2019/06/10 Python
使用Filter过滤python中的日志输出的实现方法
2019/07/17 Python
Manuka Doctor英国官网:真正的麦卢卡蜂蜜和护肤品
2018/10/26 全球购物
美国克罗格超市在线购物:Kroger
2019/06/21 全球购物
如何定义一个可复用的服务
2014/09/30 面试题
工商管理专业实习生自我鉴定
2013/09/29 职场文书
SQL CASE 表达式的具体使用
2022/03/21 SQL Server
Python测试框架pytest高阶用法全面详解
2022/06/01 Python