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基于Pymssql模块实现连接SQL Server数据库的方法详解
Jul 20 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
Apr 21 Python
pytorch cnn 识别手写的字实现自建图片数据
May 20 Python
Pycharm 创建 Django admin 用户名和密码的实例
May 30 Python
Python实现Singleton模式的方式详解
Aug 08 Python
python实现从wind导入数据
Dec 03 Python
Python selenium页面加载慢超时的解决方案
Mar 18 Python
Python xlwt模块使用代码实例
Jun 10 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
Jun 23 Python
通俗易懂了解Python装饰器原理
Sep 17 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
Jan 11 Python
matplotlib交互式数据光标实现(mplcursors)
Jan 13 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实现数组中索引关联数据转换成json对象的方法
2015/07/08 PHP
PHP上传图片、删除图片简单实例
2016/11/12 PHP
详解Yii2高级版引入bootstrap.js的一个办法
2017/03/21 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
关于图片按比例自适应缩放的js代码
2011/10/30 Javascript
js获取html页面节点方法(递归方式)
2013/12/13 Javascript
引入autocomplete组件时JS报未结束字符串常量错误
2014/03/19 Javascript
jquery网页回到顶部效果(图标渐隐,自写)
2014/06/16 Javascript
jQuery中on()方法用法实例
2015/01/19 Javascript
JavaScript事件委托实例分析
2015/05/26 Javascript
MVC+jQuery.Ajax异步实现增删改查和分页
2020/12/22 Javascript
js获取iframe中的window对象的实现方法
2016/05/20 Javascript
JavaScript使用readAsDataURL读取图像文件
2017/05/10 Javascript
parabola.js抛物线与加入购物车效果的示例代码
2017/10/25 Javascript
Vim快速合并行及vim 将文件所有行合并到一行
2017/11/27 Javascript
微信小程序实现全国机场索引列表
2018/01/31 Javascript
详解vue 兼容IE报错解决方案
2018/12/29 Javascript
vue 点击展开显示更多(点击收起部分隐藏)
2019/04/09 Javascript
基于layPage插件实现两种分页方式浅析
2019/07/27 Javascript
浅析JavaScript 函数防抖和节流
2020/07/13 Javascript
闭包在python中的应用之translate和maketrans用法详解
2014/08/27 Python
Python socket C/S结构的聊天室应用实现
2014/11/30 Python
python执行等待程序直到第二天零点的方法
2015/04/23 Python
Python如何抓取天猫商品详细信息及交易记录
2018/02/23 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
2018/09/13 Python
python使用matplotlib画饼状图
2018/09/25 Python
使用Pycharm分段执行代码
2020/04/15 Python
解决python脚本中error: unrecognized arguments: True错误
2020/04/20 Python
Python读取xlsx数据生成图标代码实例
2020/08/12 Python
Magee 1866官网:Donegal粗花呢外套和大衣专家
2019/11/01 全球购物
如何用JQuery进行表单验证
2013/05/29 面试题
Ruby如何创建一个线程
2013/03/10 面试题
教师师德考核自我评价
2014/09/13 职场文书
幼儿园小班见习报告
2014/10/31 职场文书
银行工作心得体会范文
2016/01/23 职场文书
「回转企鹅罐」10周年纪念展「輪るピングドラム展」海报公开
2022/03/22 日漫