【问题标题】:how to get all process information in linux?如何获取linux中的所有进程信息?
【发布时间】:2016-11-08 04:57:43
【问题描述】:

我想在 linux 服务器中获取所有进程信息。
PID, USER, CPU% , COMMAND ...
确切地说,我想在 python 脚本中获取这些信息。我试过了
a,b = commands.getstatusoutput('top -n 1')
这给了我大约 20 行按 CPU% 排序的结果,但我想要更多,大约 40 或 50 行结果。

我该怎么办?

我使用 psutil 如下,对于每个 proc,它需要等待 1 秒。如何快速获得 cpu_percent like top 命令。

for proc in psutil.process_iter():
    try:
        pinfo = proc.as_dict(attrs=['pid', 'username', 'cpu_percent', 'name'])
        pinfo['cpu_percent'] = proc.cpu_percent(interval=1)
        if pinfo['cpu_percent'] > 0:
            print(pinfo)
        except psutil.NoSuchProcess:
            pass

【问题讨论】:

  • 第一次阅读top的手册
  • 阅读proc(5)
  • 其实我看过top的手册,但是我误解了“top -b”的功能。 nexus66 给了我正确的答案。

标签: python linux top-command


【解决方案1】:

不要调用像 top 这样的外部进程,而是自己构建信息。查看psutil library。它应该为您提供所需的所有数据。

【讨论】:

  • 好用,但是当我使用 pinfo = proc.as_dict(attrs=['pid', 'username', 'cpu_percent', 'name']), cpu_percent 返回 0.0
  • 你确定cpu百分比大于0吗?
  • 我测试所有正在运行的proc,所以至少有一个proc大于0。
  • 你使用的是什么区间值?
【解决方案2】:

我建议您使用psutil library,就像 zenlc2000 在他的评论中所说的那样。 但是,您可以使用 top 命令的输出。

您还必须查看top command's manual 或在终端中直接写man top

我给你一个在 Python3(或 Python2)中使用 top 命令输出的例子:

假设我想知道 gedit 的 top 命令的输出:

$ top -b n 1 | grep gedit

输出:

8381 nexus   20   0  565928  43696  30268 S   0,0  1,1   0:06.03 gedit

为了理解输出,我会用键来写:

 PID  UTIL     PR    NI    VIRT     RES    SHR   S  %Cpu %MEM TEMPS+   COM.
 8381 nexus    20    0     565928   43696  30268 S  0,0  1,1  0:06:03  gedit

现在,我们将使用 awk 过滤输出:

$ echo -n "%CPU: " && top -b n 1 | grep gedit | awk '{print $9}'

输出:

%CPU: 0,0

或者简单地说:

$ top -b n 1 | grep gedit | awk '{print $9}'

输出:

0,0

在终端中使用 Python3(或您想要的任何版本):

$ python3
>>> import subprocess
>>> proc = subprocess.Popen("top -b n 1 | grep gedit | awk '{print $9}'", shell = True, stdout=subprocess.PIPE)
>>> p = proc.communicate()
>>> p[0].decode("utf8").replace("\n","")

输出:

0,0

给你!你得到了使用 Python3 的 gedit 进程百分比和 top 命令的输出。

您可以重复此过程以从顶部的输出中获取所需的所有信息。

【讨论】:

  • 谢谢,“-b”正是我所需要的。之前看过top的手册,但是对“-b”的功能理解有误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
相关资源
最近更新 更多