python psutil 获取命令历史_Python使用psutil获取进程信息的例子

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 "", line 1, in

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使用psutil获取进程信息的例子

本文地址: http://www.cppcns.com/jiaoben/python/293454.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux传文件file,linux文件的传输与压缩快速入门

scp --- 用于远程拷贝文件上传文件scp file userip:/file下载文件scp userip:/file filersync --- 远程同步,速度块,默认会忽略,文件属性,链接文件,设备文件-r --- 同步目录-p --- 同步权限-o --- 同步文件所有人-g --…

Handler实现数据模板

<ul id"ulList"> <li οnclick"show({ID}‘,{Title})"><a href"somepage.html?id{ID}" >{Title}</a><br /> {Content}</li> </ul> $.get("Handler.ashx?n" Math.random(), { action: &q…

delphi 中如果不进行 closehandle 会怎么样_心理学:当你迷茫了,请坚持做三件事,你的未来会越来越好...

我们总是这样激励自己&#xff1a;未来是美好的。但是&#xff0c;生活不可能处处如意&#xff0c;人的一生也难以风平浪静&#xff0c;有巅峰就有低谷&#xff0c;有明朗就有迷茫。或是找不到未来发展的方向&#xff0c;或是事业、生活遭受了重大挫折&#xff0c;我们每个人都…

linux的svn端口查看,linux查看端口被占用

1、netstat -tunlp|grep 8080[rootsvn AdLog]# netstat -tunlp|grep 8080tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 22067/java2、ps -ef|grep 22067[rootsvn AdLog]# ps -ef|grep 22067root 22067 1 5 15:22 pts/0 00:00:18 /usr/bin/java -Djava.util.logging.config.file/mnt/…

随笔2 PAT1001.A+B Format (20)

1001.AB Format(20) 题目链接 1001.AB Format (20) C 代码 第一次使用markdown&#xff0c;还不是很习惯&#xff0c;现在努力的在适应它 首先这道题我们很容易就可以读懂题意&#xff0c;就是简单的ab&#xff0c;只不过要求我们在输出sum的时候处理一下数字的格式。那么我的做…

mybatis传递多个参数_深入浅出MyBatis:MyBatis解析和运行原理

原文&#xff1a;https://juejin.im/post/5abcbd946fb9a028d1412efc本篇文章是「深入浅出MyBatis&#xff1a;技术原理与实践」书籍的总结笔记。上一篇介绍了反射和动态代理基础&#xff0c;主要是为本篇文章做个铺垫&#xff0c;反射使配置和灵活性大大提高&#xff0c;可以给…

linux ps 进程组,linux进程管理(2)---进程的组织结构

一、目的linux为了不同的进程管理目的&#xff0c;使用了不同的方法组织进程之间的关系&#xff0c;为了体现父子关系&#xff0c;使用了“树形”图&#xff1b;为了对同一信号量统一处理&#xff0c;使用了进程组&#xff1b;为了快速查找某个进程&#xff0c;使用了哈希表&am…

【Qt】Qt之进程间通信(共享内存)【转】

简述 上一节中&#xff0c;我们分享下如何利用Windows消息机制来进行不同进程间的通信。但是有很多局限性&#xff0c;比如&#xff1a;不能跨平台&#xff0c;而且必须两个进程同时存在才可以&#xff0c;要么进程A发了消息谁接收呢&#xff1f; 下面我们来分享另外一种跨平台…

python progressbar print_python print 进度条的例子

def progress(width, percent):print "%s %d%%\r" % ((%%-%ds % width) % (width * percent / 100 * ""), percent),if percent > 100:printsys.stdout.flush()首先&#xff0c;先说明一下print的一些用法:和C语言一样&#xff0c;字符串里的匹配使用‘…

linux中常用的shell脚本,Linux常用shell脚本

1. 设置ssh、scp命令的认证运行一次脚本后&#xff0c;以后再使用ssh或scp命令登录远程机器时不再提示输入密码-----------------setkey.sh开始-------------------------OLDDIRpwdif [ -z "$1" ]; thenecho Need userhost info;exit;fi;cd $HOME;if [ -e "./.s…

HDU 2042:不容易系列之二

不容易系列之二 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 5 Accepted Submission(s) : 5 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description 你活的不容易&#xff0c;我活…

统计建模与r软件_【统计建模与R软件笔记】008 描述统计量(1)

今天我们开始来学习描述统计量吧&#xff01;位置的度量位置的度量就是用来描述定量资料的集中趋势的统计量&#xff0c;常用的有均值、众数、中位数、百分位数等。1.均值 mean( )形式&#xff1a;mean(x, trim 0, na.rm FALSE)x 是对象(如向量、矩阵、数组或数据框)trim 是计…

npm环境安装linux,Node.js环境在linux上的部署教程

我们以centOS为例来说说如何部署node.js环境一 打开centos,然后开始下载node.js包curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -yum -y install nodejs二 安装gcc环境yum install gcc-c make安装完成!三 安装nodejs的npm,这是一个包程序工具,类似于…

Nancy跨平台开发总结(三)发布到Jexus Web服务器

在Centos7上安装Mono yum install yum-utils rpm --import "http://keyserver.ubuntu.com/pks/lookup?opget&search0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF" yum-config-manager --add-repo http://download.mono-project.com/repo/centos/ yum install m…

stat函数_数据分析工具入门 掌握这些Excel函数就够了

1.什么是函数可以把函数理解为一个可以控制的黑箱子&#xff0c;输入X到黑箱子中&#xff0c;他就会输出Y&#xff0c;参数就是黑箱子的控制开关&#xff0c;打到不同的档位&#xff0c;黑箱子会输出不同的Y。2.常见函数分类文本清洗函数关联匹配函数逻辑运算函数计算统计函数时…

linux安装nodejs一键脚本,ubuntu16.04部署nodejs+vue框架脚本

#获取和安装nodewget https://nodejs.org/dist/v8.9.2/node-v8.9.2-linux-x64.tar.xzxz -d node-v8.9.2-linux-x64.tar.xztar xf node-v8.9.2-linux-x64.tar -C /usr/local#创建软连接ln -s /usr/local/node-v8.9.2-linux-x64 /usr/local/node#配置环境并生效echo "export…

Linux下jdk配置环境变量

vi /etc/profile在里面添加如下内容JAVA_HOME/usr/local/java/jdk1.6.0_01PATH$JAVA_HOME/bin:$PATHCLASSPATH.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport JAVA_HOMEexport PATHexport CLASSPATH变量生效重新登录即可5.进入 /usr/bin/目录cd /usr/binln -s -f /us…

mysql获取当前时间毫秒_MySQL性能指标及计算方法

是新朋友吗?记得先点蓝字关注我哦~ 今日课程菜单 Java全栈开发 | Web前端+H5 大数据开发 | 数据分析 人工智能+Python | 人工智能+物联网 来源:小职(z_zhizuobiao) 找我:✅ 解锁高薪工作 ✅ 免费获取干货教程 未 完 待 续 绝大多数MySQL性能指标可以通过以下两种方式获取:…

linux时间戳转换不对,转换为unix时间戳不正确

我有我写了一个函数(如果有一个很好的标准替代&#xff0c;请让我知道...)转换为unix时间戳不正确time_t get_unix_time(string time_str) {time_t loctime;time(&loctime);struct tm *given_time;time_str time_str.substr(0, time_str.find_first_of(.));replace(time_s…

什么是REST API?

REST指一组架构约束条件和原则&#xff0c;满足约束条件和原则的应用程序设计。架构&#xff0c;软件体系结构分为三部分&#xff1a;构建&#xff0c;用于描述计算机&#xff1b;连接器&#xff0c;用于描述构建的链接部分&#xff1b;配置将构建和连接器组成有机整体。web基本…