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 相关文章推荐
使用python的chardet库获得文件编码并修改编码
Jan 22 Python
python读取浮点数和读取文本文件示例
May 06 Python
Python3实现对列表按元组指定列进行排序的方法分析
Dec 22 Python
Python实现制度转换(货币,温度,长度)
Jul 14 Python
利用python list完成最简单的DB连接池方法
Aug 09 Python
在Python中预先初始化列表内容和长度的实现
Nov 28 Python
python线程join方法原理解析
Feb 11 Python
浅谈Python中文件夹和python package包的区别
Jun 01 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
Jun 03 Python
Python logging模块异步线程写日志实现过程解析
Jun 30 Python
Python函数中的不定长参数相关知识总结
Jun 24 Python
PYTHON使用Matplotlib去实现各种条形图的绘制
Mar 22 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
php中常用字符串处理代码片段整理
2011/11/07 PHP
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
2011/11/26 PHP
使用php测试硬盘写入速度示例
2014/01/27 PHP
windows7下安装php的imagick和imagemagick扩展教程
2014/07/04 PHP
分享PHP源码批量抓取远程网页图片并保存到本地的实现方法
2015/12/01 PHP
[原创]网络复制内容时常用的正则+editplus
2006/11/30 Javascript
jQueryUI如何自定义组件实现代码
2010/11/14 Javascript
jquery插件珍藏(图片局部放大/信息提示框)
2013/01/08 Javascript
Js实现滚动变色的文字效果
2014/06/16 Javascript
Javascript基础教程之函数对象和属性
2015/01/18 Javascript
js实现卡片式项目管理界面UI设计效果
2015/12/08 Javascript
简单学习vue指令directive
2016/11/03 Javascript
nodejs+express实现文件上传下载管理网站
2017/03/15 NodeJs
JS实现的加减乘除四则运算计算器示例
2017/08/09 Javascript
AngularJS模态框模板ngDialog的使用详解
2018/05/11 Javascript
Vue父组件如何获取子组件中的变量
2019/07/24 Javascript
[01:05:00]2018国际邀请赛 表演赛 Pain vs OpenAI
2018/08/24 DOTA
[47:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第二场 3月4日
2021/03/11 DOTA
python实现在windows服务中新建进程的方法
2015/06/30 Python
Python利用turtle库绘制彩虹代码示例
2017/12/20 Python
PyQt5 pyqt多线程操作入门
2018/05/05 Python
tensorflow实现简单逻辑回归
2018/09/07 Python
Python的argparse库使用详解
2018/10/09 Python
python使用suds调用webservice接口的方法
2019/01/03 Python
Python3删除排序数组中重复项的方法分析
2019/01/31 Python
python3 property装饰器实现原理与用法示例
2019/05/15 Python
python psutil模块使用方法解析
2019/08/01 Python
python线程安全及多进程多线程实现方法详解
2019/09/27 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
浅析HTML5中的 History 模式
2017/06/22 HTML / CSS
婚礼证婚人证婚词
2014/01/13 职场文书
询价采购方案
2014/06/09 职场文书
建设工程授权委托书
2014/09/22 职场文书
在职证明范本
2015/06/15 职场文书
Windows下用Nginx配置https服务器及反向代理的问题
2021/09/25 Servers
SpringBoot接入钉钉自定义机器人预警通知
2022/07/15 Java/Android