基于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 urlopen 使用小示例
Sep 06 Python
python计算程序开始到程序结束的运行时间和程序运行的CPU时间
Nov 28 Python
python使用tensorflow深度学习识别验证码
Apr 03 Python
浅谈Tensorflow由于版本问题出现的几种错误及解决方法
Jun 13 Python
对python字典元素的添加与修改方法详解
Jul 06 Python
Python实用工具FuckIt.py介绍
Jul 02 Python
python实现获取单向链表倒数第k个结点的值示例
Oct 24 Python
python网络编程之五子棋游戏
May 14 Python
Python实现在线批量美颜功能过程解析
Jun 10 Python
如何在windows下安装配置python工具Ulipad
Oct 27 Python
利用python爬取有道词典的方法
Dec 08 Python
Python实现PIL图像处理库绘制国际象棋棋盘
Jul 16 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
使用apache模块rewrite_module (转)
2007/02/14 PHP
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
2013/06/25 PHP
php5.3 goto函数介绍和示例
2014/03/21 PHP
Yii数据模型中rules类验证器用法分析
2016/07/15 PHP
thinkphp3.2.3 分页代码分享
2016/07/28 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
php连接sftp的作用以及实例代码
2019/09/23 PHP
asp.net和asp下ACCESS的参数化查询
2008/06/11 Javascript
JavaScript简单实现网页回到顶部功能
2013/11/12 Javascript
jquery实现个人中心导航菜单效果和美观都非常不错
2014/09/02 Javascript
JavaScript设计模式之单例模式实例
2014/09/24 Javascript
深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解
2016/04/03 Javascript
JS模仿腾讯图片站的图片翻页按钮效果完整实例
2016/06/21 Javascript
JQuery EasyUI的一些常用组件
2017/07/12 jQuery
nodejs调取微信收货地址的方法
2017/12/20 NodeJs
解析Json字符串的三种方法日常常用
2018/05/02 Javascript
echarts同一页面中四个图表切换的js数据交互方法示例
2018/07/03 Javascript
在vue中axios设置timeout超时的操作
2020/09/04 Javascript
Selenium执行JavaScript脚本的方法示例
2020/12/31 Javascript
为python设置socket代理的方法
2015/01/14 Python
python遍历文件夹下所有excel文件
2018/01/03 Python
python SSH模块登录,远程机执行shell命令实例解析
2018/01/12 Python
html5中地理位置定位api接口开发应用小结
2013/01/04 HTML / CSS
澳大利亚排名第一的儿童在线玩具商店:Toy Galaxy
2018/10/06 全球购物
介绍一下Java的安全机制
2012/06/28 面试题
工地标语大全
2014/06/18 职场文书
仓库管理员岗位职责
2015/02/03 职场文书
2015年银行工作总结范文
2015/04/01 职场文书
员工试用期工作总结
2019/06/20 职场文书
公务员的复习计划书,请收下!
2019/07/15 职场文书
导游词之上海杜莎夫人蜡像馆
2019/11/22 职场文书
详解PHP设计模式之依赖注入模式
2021/05/25 PHP
python Tkinter模块使用方法详解
2022/04/07 Python
python使用pycharm安装pyqt5以及相关配置
2022/04/22 Python
Spring中的@Transactional的工作原理
2022/06/05 Java/Android
V Rising 服务器搭建图文教程
2022/06/16 Servers