python怎么获取windows服务的PID
2016-07-19 15:03
441 查看
代码背景
部署在windows上的测试服务器服务会由于某种原因(当然,现在是解决了)出现服务挂了的情况。由于有一定周期性,所以就写了脚本进行处理。本节主要讲的是pid的获取与取到pid后处理方式(windows)。本次需要额外安装的库有两个:psutil,subprocess
subprocess很简单,可以用pip安装。psutil安装需要VC2010++库,但是据我实测,VC2010++库就算安装上了也会出现安装不上的情况。所以分享一个psutil包。此包有版本限制,之前写这程序的时候我的python版本是:3.4.3 。
链接:http://pan.baidu.com/s/1dE93riT 密码:y8cd
代码
下面上代码,为了便于理解,特意在代码后添加了注释。希望有所帮助。import psutil import re import sys import os import time import logging import subprocess logging.basicConfig(level=logging.INFO, format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S', filename='pid.log', filemode='a') #日志配置 logging.debug('----------------------------------------------init----------------') PROCESS_RE = re.compile("pid=\d{1,4},\sname='\S{1,20}'") #采用正则,获取数据 pid=x/xx/xxx/xxxx, name=[1~20个字符,不是空格] pidNotHandle = list(psutil.process_iter()) #获取当前计算机的pid pid = [] pidName = [] for each in pidNotHandle: a = str(each) #each 是 class类型,可用type(each)查看类型 print(a) #数据样式为:psutil.Process(pid=0, name='System Idle Process') pid.append(a[15:-1]) # 只取括号内部分;pid=0, name='System Idle Process' for each in pid: print(each) b = each.find("name") #获取name的位置;name='System Idle Process' c = each[b+6:-1] #获取name值;System Idle Process #print(c) if c == "OrgTomcat.exe": #目标服务名称为:OrgTomcat.exe d = each.find("pid") #获取对象的位置;pid=0, name='System Idle Process' e = each[d+4:b-2] #获取pid的值:0 print("PID:",e) #打印目标服务的PID unread = os.popen('tasklist | findstr '+ e) #查看占用该PID的有哪些服务 logging.info(unread.read()) print('read1:',unread.read()) unread2 = os.popen('taskkill /pid %s /f' % e) #杀掉该PID的服务 read2 = unread2.read() print('read2:',read2) time.sleep(10) unread3 = os.popen('net start "Apache Tomcat 7.0 OrgTomcat"') #重新启动服务名称为:‘Apache Tomcat 7.0 OrgTomcat’服务 print('read3:',unread3.read()) logging.info(unread3.read()) break #for i in range(len(pid)): #pid[pid[i].find(name)+6:] #print() #type(pid[-1]) #pid[-1].find('name') #b = pid[-1] #b.find('name')
附件
程序运行结果图:cmd窗口命令执行图:
相关文章推荐
- Python 2.7 执行某一程序并获取PID
- JAVA实现获取Linux下进程PID并杀掉进程
- 处理Python未捕获异常
- Python爬虫:常用浏览器的useragent
- 以写代学:python 文件打开,写入,复制
- python使用cxfreeze打包
- python3.x和python2.x区别
- python概述
- python pexpect
- python正则表达式--基本用法和函数(一个例子)
- python中的map、filter、reduce函数
- Python入门语法要点
- Python 小甲鱼教程 课后练习39
- PyMySQL-在Python 3.x下连接MySQL数据库的方法
- Python随堂笔记10-11-12
- Python爬虫实践:从中文歌词库抓取歌词
- 【Python】入门二
- python中string模块
- Python学习进程(5)Python语法
- caffe的python接口学习(4):mnist实例---手写数字识别