• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

pps: Linux `ps -aux` command wrapper by python, 用 Python 对命令 `ps -aux` 进行 ...

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

pps

开源软件地址:

https://gitee.com/konghy/pps

开源软件介绍:

PPS -- Python PS

Linux ps -aux command wrapper by python, 用 Python 对命令 ps -aux 进行简单的封装。

接口说明

class UnfoundException()

异常类,当文件、进程等找不到时会抛出该异常

class CMDOutException()

异常类,当电泳 Shell 命令出错,或者输出结果不符合预期时会抛出该异常

class Process(pid)

进程类,将 ps -aux 输出的每一列作为进程对象的属性。进程对象的方法如下:

  • Process.update()

更新进程信息。该方法会在初始化对象时默认被调用一次。由于进程的运行信息是动态变化用,可以用该方法实时更新进程的信息。

  • Process.kill()

杀死进程。该方法持续向进程发送 SIGTERM 信号,直到进程被关闭。

  • Process.to_dict()

将进程信息转化为 dict。该方法仅仅为了某些场合的方便,一般情况不建议调用,因为 Python 的字典是弱引用,大量的调用该方法可能会出现内存泄露。

processes()

获取所有进程信息,返回一个迭代器。该方法在调用时先捕获该时刻 ps -aux 列出的所有进程的 pid,然后再迭代这些进程的信息。

调用该函数时需要注意:

由于调用 processes() 与通过迭代器迭代到一个进程的信息之间存在一定的时间间隔,所以你获得的信息是迭代时的实时信息,而不是调用 processes() 时的信息。因此,该方法存在这样的一些缺陷:在调用 processes() 时捕获到的进程,在迭代时获取不到该进程的信息,因为该进程可能已经退出;无法捕获到迭代过程中新产生的进程。

实际上我认为该方法的应用场景不多,也不建议使用该方法。我们大多数情况下只需要获取某一个进程的信息。

mem_percent()

返回系统总的内存占用百分比。通过读取 /proc/meminfo 文件获取,计算公式为:

(MemTotal - MemFree - Buffers - Cached)/MemTotal * 100

cpu_percent()

返回 CPU 总的使用率百分比。通过读取 /proc/stat 获取,计算公式为:

total_cputime = total_cputime_2 - total_cputime_1idle_cputime = idle_cputime_2 - idle_cputime_1percent = ((total_cputime - idle_cputime) / total_cputime) * 100

即对总 cpu 时间和空闲 cpu 时间进程分段采样(采样的时间间隔为 0.1 秒),然后再求差值。

注: 所有接口仅在 Ubuntu 环境下测试通过。

Linux ps -aux 命令说明

该命令用于列出系统中所有的进程。-a 表示列出所有进程,不区分用户;-u 表示以进程属主为主的格式来显示程序状况;-x 表示不去分前台还是后台进程。

Linux 上的进程包含 5 种状态:

    1. 运行(正在运行或在运行队列中等待)
    1. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
    1. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
    1. 僵死(进程已终止, 但进程描述符存在, 等待父进程清理)
    1. 停止(进程收到 SIGSTOP, SIGSTP, SIGTIN, SIGTOU 信号后停止运行)

ps 工具对应 5 种状态的状态码(在 stat 列显示):

  • D: 不可中断 uninterruptible sleep (usually IO)
  • R: 运行 runnable (on run queue)
  • S: 中断 sleeping
  • T: 停止 traced or stopped
  • Z: 僵死 a defunct (”zombie”) process

ps 工具还有其他的进程状态码:

  • W: 进入内存交换(从内核2.6开始无效)
  • X: 死掉的进程(很少见)
  • <: 高优先级
  • n: 低优先级
  • s: 包含子进程
  • +: 位于后台的进程组

ps -aux 命令列出进程的各列的含义如下

  • USER: 进程的拥有者
  • PID: 进程的 pid
  • %CPU: 占用的 CPU 使用率
  • %MEM: 占用的 MEM 使用率
  • VSZ: 占用的虚拟大小(KB)
  • RSS: 占用的固定内存大小(KB)(驻留中页的数量)
  • TTY: 进程继承自哪个终端,若无终端(守护进程)则为?
  • STAT: 该进程的状态
  • START: 进程运行的开始时间
  • TIME: 进程实际执行的时间
  • COMMAND: 进程执行的命令

应用示例

利用 pps 模块写了一个简单的示例,在 example 目录中,即 watchpmc.py。该示例监控指定进程的内存和 CPU 占用,当进程的内存占用超出指定阀值并且总的内存和 CPU 占用超过 90% 时就杀掉该进程。

版本

v0.1: 2016-07-09


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap