Python使用psutil获取进程信息的例子


Posted in Python onDecember 17, 2019

psutil是什么

psutil是一个能够获取系统信息(包括进程、CPU、内存、磁盘、网络等)的Python模块。主要用来做系统监控,性能分析,进程管理,像glances也是基于psutil写成的。

在不了解这个模块之前,我都是直接用subprocess去直接执行系统命令来取得进程信息,但是这样会多写很多系统命令行。psutil可以让我们更方便地获取进程信息。

psutil获取进程信息

psutil可以获取进程信息,示例如下:

>>> p = psutil.Process(27050)
>>> p
psutil.Process(pid=27050, name='python', started='10:45:29')
>>> p.name() #进程名
'python'
>>> p.exe() #进程的bin路径
'/usr/bin/python3.6'
>>> p.cwd() #进程的工作目录
'/home/len/scripts/python/designmode'
>>> p.cmdline() #执行进程的命令
['python']
>>> p.pid #进程的id
27050
>>> p.ppid() #父进程的id
16586
>>> p.children() #进程的子进程
[]
>>> p.parent() #进程的父进程
psutil.Process(pid=16586, name='bash', started='09:08:15')
>>> p.parents() #进程的所有父进程,可以看到最后是id为1的systemd
[psutil.Process(pid=16586, name='bash', started='09:08:15'), psutil.Process(pid=16585, name='sshd', started='09:08:15'), psutil.Process(pid=16582, name='sshd', started='09:08:14'), psutil.Process(pid=2892, name='sshd', started='2019-06-21 14:53:40'), psutil.Process(pid=1, name='systemd', started='2019-06-21 14:53:21')]
>>> p.status() #进程状态
'running'
>>> p.username() #进程用户名
'len'
>>> p.create_time() #进程创建的时间戳
1564022729.45
>>> p.terminal() #执行进程的终端
'/dev/pts/0'
>>> p.uids() #执行进程的用户id
puids(real=1000, effective=1000, saved=1000)
>>> p.gids() #执行进程的组id
pgids(real=1000, effective=1000, saved=1000)
>>> p.cpu_times() #进程占用的cpu时间
pcputimes(user=0.35, system=0.08, children_user=0.0, children_system=0.0)
>>> p.cpu_percent(interval=1.0) #进程占用的cpu比率
0.0
>>> p.cpu_affinity() #进程cpu亲和度
[0]
>>> p.cpu_num() #进程占用cpu个数
0
>>> p.memory_info() #进程内存信息
pmem(rss=10539008, vms=176517120, shared=3698688, text=4096, lib=0, data=6397952, dirty=0)
>>> p.memory_full_info() #进程完整内存信息
pfullmem(rss=10539008, vms=176517120, shared=3698688, text=4096, lib=0, data=6397952, dirty=0, uss=9244672, pss=9340928, swap=0)
>>> p.memory_percent() #进程占用内存比率
0.5467627733813867
>>> p.threads() #进程的线程
[pthread(id=27050, user_time=0.35, system_time=0.08)]
>>> p.nice() #进程的优先度
0

如果是普通用户,因为权限不够,在获取一些系统进程的信息时可能会报错,如下:

>>> p = psutil.Process(1)
>>> p
psutil.Process(pid=1, name='systemd', started='2019-06-21 14:53:21')
>>> p.cwd()
Traceback (most recent call last):
 File "/usr/lib64/python3.6/site-packages/psutil/_pslinux.py", line 1513, in wrapper
  return fun(self, *args, **kwargs)
 File "/usr/lib64/python3.6/site-packages/psutil/_pslinux.py", line 1858, in cwd
  return readlink("%s/%s/cwd" % (self._procfs_path, self.pid))
 File "/usr/lib64/python3.6/site-packages/psutil/_pslinux.py", line 213, in readlink
  path = os.readlink(path)
PermissionError: [Errno 13] Permission denied: '/proc/1/cwd'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "/usr/lib64/python3.6/site-packages/psutil/__init__.py", line 828, in cwd
  return self._proc.cwd()
 File "/usr/lib64/python3.6/site-packages/psutil/_pslinux.py", line 1516, in wrapper
  raise AccessDenied(self.pid, self._name)
psutil.AccessDenied: psutil.AccessDenied (pid=1, name='systemd')

可以看到psutil跟大部分监控命令一样都是从/proc/1/cwd里获取信息的。

模拟ps

>>> psutil.test()
USER     PID %MEM   VSZ   RSS NICE STATUS START  TIME CMDLINE
root      1  0.2 123.1M  3.8M    sleep Jun21 10:07 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root      2  0.0  0.0B  0.0B    sleep Jun21 00:00 kthreadd
...
len    26598  0.3 164.4M  6.2M    sleep Jul02 00:00 w3m baidu.com
len    27050  0.6 168.3M  10.2M    runni 10:45 00:00 python

根据进程名获取pid

>>> for p in psutil.process_iter(attrs=['pid', 'name']):
...   if 'kw' in p.info['name']:
...     print(p.info)
... 
{'name': 'kworker/0:0H', 'pid': 5}
{'name': 'kworker/0:1', 'pid': 785}
{'name': 'kworker/0:1H', 'pid': 1063}
{'name': 'kworker/0:2', 'pid': 1306}
{'name': 'kworker/0:0', 'pid': 1828}
{'name': 'kworker/u2:1', 'pid': 15677}
{'name': 'kworker/u2:2', 'pid': 17551}

根据完整进程名获取pid

for p in psutil.process_iter():
  if 'my.cnf' in ' '.join(p.cmdline()):
    print(p.pid)

结尾

本文主要讲psutil进程部分,其它的如内存、CPU、磁盘等都没有写到,想详细了解psutil的可以访问psutil的github以获取更多信息。

以上这篇Python使用psutil获取进程信息的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python3实现的腾讯微博自动发帖小工具
Nov 11 Python
Python基于递归算法实现的汉诺塔与Fibonacci数列示例
Apr 18 Python
Python操作MySQL数据库的方法
Jun 20 Python
Python中的集合介绍
Jan 28 Python
Python调用graphviz绘制结构化图形网络示例
Nov 22 Python
django formset实现数据表的批量操作的示例代码
Dec 06 Python
PyCharm下载和安装详细步骤
Dec 17 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
Jun 05 Python
Keras自定义实现带masking的meanpooling层方式
Jun 16 Python
python模块如何查看
Jun 16 Python
python怎么判断素数
Jul 01 Python
一文带你了解Python 四种常见基础爬虫方法介绍
Dec 04 Python
python psutil监控进程实例
Dec 17 #Python
查看端口并杀进程python脚本代码
Dec 17 #Python
python中的线程threading.Thread()使用详解
Dec 17 #Python
PyCharm下载和安装详细步骤
Dec 17 #Python
python实现指定ip端口扫描方式
Dec 17 #Python
python飞机大战pygame碰撞检测实现方法分析
Dec 17 #Python
python wxpython 实现界面跳转功能
Dec 17 #Python
You might like
风格模板初级不完全修改教程
2006/10/09 PHP
php防攻击代码升级版
2010/12/29 PHP
thinkPHP导出csv文件及用表格输出excel的方法
2015/12/30 PHP
基于jQuery的弹出框插件
2012/03/18 Javascript
javascript中关于break,continue的特殊用法与介绍
2012/05/24 Javascript
jquery实现带二级菜单的导航示例
2014/04/28 Javascript
每天一篇javascript学习小结(Boolean对象)
2015/11/12 Javascript
jquery 重写 ajax提交并判断权限后 使用load方法报错解决方法
2016/01/19 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
2016/04/30 Javascript
浅析jQuery Ajax通用js封装
2016/06/22 Javascript
jQuery实现简洁的轮播图效果实例
2016/09/07 Javascript
详解如何用VUE写一个多用模态框组件模版
2018/09/27 Javascript
vue.js+elementUI实现点击左右箭头切换头像功能(类似轮播图效果)
2019/09/05 Javascript
Vue.js中的高级面试题及答案
2020/01/13 Javascript
JavaScript前端开发时数值运算的小技巧
2020/07/28 Javascript
Vue实现购物小球抛物线的方法实例
2020/11/22 Vue.js
[01:45]IMBATV TI4前线报道-选手到达
2014/07/07 DOTA
[42:56]VGJ.S vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[00:52]玛尔斯技能全介绍
2019/03/06 DOTA
python下函数参数的传递(参数带星号的说明)
2010/09/19 Python
Python random模块常用方法
2014/11/03 Python
python环形单链表的约瑟夫问题详解
2018/09/27 Python
值得收藏的10道python 面试题
2019/04/15 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
2019/04/25 Python
python获取依赖包和安装依赖包教程
2020/02/13 Python
汽车维修专业个人求职信范文
2014/01/01 职场文书
校园奶茶店创业计划书
2014/01/23 职场文书
小学家长评语大全
2014/04/16 职场文书
《小动物过冬》教学反思
2014/04/17 职场文书
司法局火灾防控方案
2014/06/05 职场文书
学校清明节活动总结
2014/07/04 职场文书
咖啡店创业计划书
2014/08/15 职场文书
审计局班子四风对照检查材料思想汇报
2014/10/07 职场文书
优秀教师工作总结2015
2015/07/22 职场文书
2016年重阳节慰问信
2015/12/01 职场文书
2016优秀护士先进个人事迹材料
2016/02/25 职场文书