linux pps指令,pps: Linux `ps -aux` command wrapper by python, 用 Python 对命令 `ps -aux` 进行简单的封装。...

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_1

idle_cputime = idle_cputime_2 - idle_cputime_1

percent = ((total_cputime - idle_cputime) / total_cputime) * 100

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

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

Linux ps -aux 命令说明

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

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

运行(正在运行或在运行队列中等待)

中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)

不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)

僵死(进程已终止, 但进程描述符存在, 等待父进程清理)

停止(进程收到 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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值