参考
部分名词解释可以参考 psutil库介绍(一)
进程部分
测试代码:
import psutil
pids = psutil.process_iter()
for pid in pids:
print ("进程名:%s,进程ID:%d") % (pid.name(),pid.pid)
输出:
进程名:systemd,进程ID:1
进程名:kthreadd,进程ID:2
进程名:ksoftirqd/0,进程ID:3
进程名:kworker/0:0H,进程ID:5
进程名:rcu_sched,进程ID:7
进程名:rcu_bh,进程ID:8
...
测试代码:
import psutil
p = psutil.Process(88102)
print '进程名:', p.name()
print '执行文件位置:', p.exe()
print '进程的工作目录:', p.cwd()
print '进程的状态:', p.status()
print '进程的拥有者:' ,p.username()
print '进程创建的时间:' ,p.create_time()
print '该进程打开的终端:' ,p.terminal()
print '用户ID:', p.uids()
print '组ID:',p.gids()
print '进程的CPU时间:', p.cpu_times()
print '进程在3秒内的CPU占用率:', p.cpu_percent(interval=3.0)
print '进程占用内存百分比:', p.memory_percent()
print '进程占用内存信息:', p.memory_info()
print '进程占用内存信息:', p.memory_info_ex()
print '进程的线程数量:', p.num_threads()
print '进程的文件描述数量:', p.num_fds()
print '进程切换(被调度)的次数:', p.num_ctx_switches()
print '进程的优先级:', p.nice()
输出:
进程名: python
执行文件位置: /usr/bin/python2.7
进程的工作目录: /home/shixin/python
进程的状态: running
进程的拥有者: root
进程创建的时间: 1435977235.72
该进程打开的终端: /dev/pts/7
用户ID: puids(real=0, effective=0, saved=0)
组ID: pgids(real=0, effective=0, saved=0)
进程的CPU时间: pcputimes(user=5.02, system=3.76)
进程在3秒内的CPU占用率: 0.0
进程占用内存百分比: 1.06501072687
进程占用内存信息: pmem(rss=22163456, vms=536449024)
进程占用内存信息(详细): pextmem(rss=22163456, vms=536449024, shared=5197824, text=3260416, lib=0, data=416690176, dirty=0)
进程的线程数量: 8
进程的文件描述数量: 52
进程切换(被调度)的次数: pctxsw(voluntary=2164, involuntary=441)
进程的优先级: 0
相关的名词解释:
> /dev/pts:这里的 `/dev/pts` 为伪终端,所谓伪终端是逻辑上的终端设备,多用于模拟终端程序, 通常是我们在X Window下打开的终端
> real:实际ID
> effective:有效ID
> saved:保存设置ID
> rss: 实际使用物理内存
> vms: 虚拟内存
> shared:共享内存
> text:进程代码段的虚拟内存页个数
> lib: lib使用的内存
> data:数据占用的内存
> dirty:dirty标志,非dirty page都可以回收
> voluntary:主动(切换)
> involuntary:被动(切换)
测试代码:
import psutil
p = psutil.Process(88102)
cmds = p.cmdline()
print '执行该进程的命令行和参数:'
for item in cmds:
print item
输出:
执行该进程的命令行和参数:
/usr/bin/python
-m
IPython.kernel
-f
/home/shixin/.ipython/profile_nbserver/security/kernel-91847b2f-51f9-4cb6-bf1a-320baf55f508.json
--profile-dir
/home/shixin/.ipython/profile_nbserver
测试代码:
import psutil
p = psutil.Process(88102)
print '进程的IO计数信息:'
print p.io_counters()
输出:
进程的IO计数信息:
pio(read_count=25342, write_count=5075, read_bytes=5877760, write_bytes=4001792)
相关的名词解释:
> read_count:读次数
> write_count:写次数
> read_bytes:读总量
> write_bytes:写总量
测试代码:
import psutil
p = psutil.Process(88102)
print '进程打开的文件:'
files = p.open_files()
for item in files:
print item
输出:
进程打开的文件:
popenfile(path='/home/shixin/.ipython/profile_nbserver/history.sqlite', fd=44)
popenfile(path='/home/shixin/.ipython/profile_nbserver/history.sqlite', fd=45)
popenfile(path='/home/shixin/.ipython/profile_nbserver/history.sqlite-journal', fd=51)
测试代码:
import psutil
p = psutil.Process(88102)
print '和进程有关的连接:'
conns = p.connections()
for item in conns:
print item
输出:
和进程有关的连接:
pconn(fd=37, family=2, type=1, laddr=('127.0.0.1', 38280), raddr=(), status='LISTEN')
pconn(fd=41, family=2, type=1, laddr=('127.0.0.1', 35145), raddr=(), status='LISTEN')
pconn(fd=26, family=2, type=1, laddr=('127.0.0.1', 55499), raddr=(), status='LISTEN')
pconn(fd=24, family=2, type=1, laddr=('127.0.0.1', 33292), raddr=(), status='LISTEN')
pconn(fd=28, family=2, type=1, laddr=('127.0.0.1', 48689), raddr=(), status='LISTEN')
...
输出:
进程打开的文件:
popenfile(path='/home/shixin/.ipython/profile_nbserver/history.sqlite', fd=44)
popenfile(path='/home/shixin/.ipython/profile_nbserver/history.sqlite', fd=45)
popenfile(path='/home/shixin/.ipython/profile_nbserver/history.sqlite-journal', fd=51)
测试代码:
import psutil
p = psutil.Process(88102)
print '子进程信息:'
threads = p.threads()
for item in threads:
print item
输出:
子进程信息:
pthread(id=88102, user_time=3.57, system_time=2.08)
pthread(id=88107, user_time=0.0, system_time=0.0)
pthread(id=88108, user_time=0.02, system_time=0.3)
pthread(id=88109, user_time=0.0, system_time=0.0)
...
测试代码:
import psutil
p = psutil.Process(88102)
print '内存映射信息:'
maps= p.memory_maps()
for item in maps:
print item
输出:
内存映射信息:
pmmap_grouped(path='[vdso]', rss=4096, size=8192, pss=0, shared_clean=4096, shared_dirty=0, private_clean=0, private_dirty=0, referenced=4096, anonymous=0, swap=0)
pmmap_grouped(path='/lib/x86_64-linux-gnu/librt-2.21.so', rss=0, size=2129920, pss=0, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=0, referenced=0, anonymous=0, swap=8192)
...
相关的名词解释:
> path:被映射到内存的文件名称
> rss:实际使用物理内存
> size:进程使用的地址空间
> pss:实际使用物理内存
> shared_clean:和其他进程共享的未改写页面
> shared_dirty:和其他进程共享的已改写页面
> private_clean:未改写的私有页面页面
> private_dirty:已改写的私有页面页面
> referenced:标记为已经访问的内存大小
> anonymous:匿名内存数据,在文件系统中没有相应的“储备”文件
> swap:存在于交换分区的数据大小