β

Python获取程序进程信息psutil模块使用(二)

虫虫开源 818 阅读

上一篇《 Python获取系统基础信息psutil模块使用 》文章主要介绍了psutil模块获取系统的基础信息,包括cpu、内存、磁盘io和网络io。psutil模块还可以查看系统进程信息,主要使用psutil.Process()和psutil.Popen()两个方法。

Process

使用方法如下所示:

>>> #导入模块,失败的说明安装失败
>>> import psutil
>>> #列出当前所有进程的pid,返回一个list
>>> psutil.pids()
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, ...]
>>> #实例化一个Process对象,指定某个进程pid
>>> p=psutil.Process(10405)
>>> #进程名称
>>> p.name()
'java'
>>> #进程pid
>>> p.pid
5
>>> #父进程pid
>>> p.ppid()
3
>>> #返回父进程,如果不存在父进程,则返回None。
>>> p.parent()
<psutil.Process(pid=10403, name='javatest.sh') at 30842192>
>>> #进程bin路径
>>> p.exe()
'/usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java'
>>> #进程工作目录绝对路径
>>> p.cwd()
'/home/sijitao.net/javatest'
>>> #返回哪个用户运行的进程
>>> p.username()
'sijitao.net'
>>> #进程状态
>>> p.status()
'sleeping'
>>> #进程创建时间,时间戳格式
>>> p.create_time()
074440.74
>>> #改成常规时间格式
>>> import datetime
>>> datetime.datetime.fromtimestamp(p.create_time())
datetime.datetime(2015, 9, 1, 10, 27, 20, 740000)
>>> print datetime.datetime.fromtimestamp(p.create_time())
-09-01 10:27:20.740000
>>> datetime.datetime.fromtimestamp(p.create_time()).strftime("%Y-%m-%d %H:%M:%S")
'2015-09-01 10:27:20'
>>> #进程uid信息
>>> p.uids()
puids(real=1003, effective=1003, saved=1003)
>>> #进程gid信息
>>> p.gids()
pgids(real=1002, effective=1002, saved=1002)
>>> #进程cpu时间信息,包括user和system两个时间。
>>> p.cpu_times()
pcputimes(user=17914.4, system=1444.41)
>>> #进程占用内存利用率百分比
>>> p.memory_percent()
.29625956853707
>>> #进程内存使用的详细信息
>>> p.memory_info() 
pmem(rss=2117931008, vms=6930079744)
>>> #a为进程使用的实际内存rss,b为使用的虚拟内存vms
>>> a, b = p.memory_info()
>>> print "a=%s,b=%s" % (a,b)
a=2104492032,b=6930079744
>>> #进程的io信息,包括读写io数和字节数
>>> p.io_counters()
pio(read_count=1028798665, write_count=1448643, read_bytes=278528, write_bytes=31179665408)
>>> #进程开启的线程数
>>> p.num_threads()

>>> #返回打开进程socket的namedutples列表,包括fs,family,laddr等信息
>>> p.connections()
[pconn(fd=178, family=10, type=1, laddr=('::ffff:xxx.xxx.xxx.xxx', 41154), raddr=('::ffff:xxx.xxx.xxx.xxx', 80), status='CLOSE_WAIT'), pconn(......]

Popen

除了Process,psutil还有一个Popen类,他可以获取用户启动的应用程序进程信息,且可以跟踪程序进程的运行状态。

类似如下:

>>> from subprocess import PIPE
>>> p1=psutil.Popen(["/usr/bin/python","-c","print('hello')"],stdout=PIPE)
>>> p1.name()
'python'
>>> p1.username()
'root'
>>> p1.communicate()
('hello\n', None)
>>> p1.cpu_times()
pcputimes(user=0.01, system=0.01)

具体使用方法参考psutil官方文档。

参考连接:http://www.sijitao.net/2043.html

作者:虫虫开源
分享个人工作学习中相关开源技术经验的网站。
原文地址:Python获取程序进程信息psutil模块使用(二), 感谢原作者分享。