如何用ps显示前五个CPU消耗进程?

#1 楼

如果可以通过ps命令轻松使用top,为什么要使用它呢?

如果必须使用ps,请尝试以下操作:

ps aux | sort -nrk 3,3 | head -n 5


如果想要真正不断更新的“顶级”产品,请使用手表

watch "ps aux | sort -nrk 3,3 | head -n 5"


评论


ps aux |排序-k 3,3 |尾-n 5 ;-)

– PlanasB
11年5月28日在19:01

最好包括数字排序,以跳过ps aux的标题。 ps aux |排序-nrk 3,3 |头-n 5

–syss
16年5月12日在10:42



这产生了许多进程,这些进程更耗资源并且也更容易出现争用情况,因为当管道数据到达头时,进程列表可能已经更改

–phuclv
17年6月12日在9:20

@LưuVĩnhPhúc是正确的,但我想知道这与实际工作方式有何不同。

–冰水
17年6月15日在2:50

@icedwater top读取过程列表并自行显示结果,而无需通过管道传递到任何其他过程

–phuclv
17年6月15日在3:16



#2 楼

正确的答案是:

ps --sort=-pcpu | head -n 6


,因此您可以指定列而不干扰排序。

例如:

ps -Ao user,uid,comm,pid,pcpu,tty --sort=-pcpu | head -n 6


Mac OS X的注意事项:在Mac OS X中,ps无法识别--sort,但提供-r来按当前CPU使用率进行排序。因此,对于Mac OS X,您可以使用:

ps -Ao user,uid,comm,pid,pcpu,tty -r | head -n 6


评论


这是正确的答案。谢谢Facundo。我试图向其他人解释您可以使用排序和管道传输,但是ps还内置了排序选项,现在我也看到您也使用它,这很棒。

–路易斯·阿尔瓦拉多(Luis Alvarado)
16年4月7日在16:01

第二个命令似乎更有用...但是第一个命令似乎只是显示bash(x2或头部)。

–野生
17年7月3日在18:19

@Wilf第一个突出显示如何在不使用命令sort的情况下按cpu消耗进行排序,第二个显示如何在不干扰排序的情况下指定列。在解释某事时..最好总是简明扼要并一次解释一件事。

– Facundo Victor
17年7月10日在10:29

#3 楼

根据您的需求,您可能会觉得这更易读:

ps -eo pcpu,pid,user,args --no-headers| sort -t. -nk1,2 -k4,4 -r |head -n 5


样本输出:

 1.3     4 root     [ksoftirqd/0]
 1.1     9 root     [ksoftirqd/1]
 1.0 17606 nobody   /usr/sbin/gmetad
 1.0    13 root     [ksoftirqd/2]
 0.3 17401 nobody   /usr/sbin/gmond


(字段为%CPU,PID,USER,COMMAND)

#4 楼

我认为ps不是您要找的东西。您是否看过top的输出?

如果您具有GNU-Top,请尝试使用其批处理模式吐出按cpu用法排序的进程列表,并使用head / tail来获得前5行(前8个是标头):

top -b -n 1 | head -n 12  | tail -n 5


BSD顶部的行为似乎有所不同,并且没有非交互模式,因此请使用另一个ps基础的解决方案。

评论


在OS X中,top -o cpu -n 5是实现同一目标的一种方法。有人知道吗?我的上衣与您的上衣不同。

– boehj
2011年5月29日下午4:00

您是拥有不同顶部的人,因此您可以说。我的顶部没有-o和-n设置退出前刷新显示的次数。

–卡莱布
2011年5月29日下午5:28

很公平。今天下午,我将在Linux机器上,看看。我的顶部似乎没有批处理模式,这是非常有限的。必须使用某种方式将top传递给其他命令。我会做一些研究。

– boehj
2011年5月29日下午5:45

我在回答中提到了批处理模式开关,但是实际上不需要顶部,因为它会自动检测到管道的一部分,而不是交互式会话。您是否尝试过不使用它进行管道输送?

–卡莱布
2011年5月29日下午5:56

会做。 GNU top的工作如今天下午所述。干杯。

– boehj
11年5月29日在12:05

#5 楼

我为此找到了最快的一个衬纸(注释6,因为标题加起来了):

ps aux k-pcpu | head -6


#6 楼

请注意,基于域代码(在ps手册页中提供),当前的ps版本在其中具有排序功能。处理器使用的域代码为“ c”。您可以在ps命令末尾使用--sort c,例如ps aux --sort c

这会将使用最大CPU的进程放在列表的底部。通过将减号添加到用于排序(例如) ps aux --sort -c

#7 楼

为了给其他有价值的答案加分,我更喜欢:

ps auxk-c | head -6


它也打印标题,这很好。

这里k--sort相同,并且c指定用于排序的CPU使用率(别名%cpu)字段,而-用于反向排序。

您可以添加更多用,分隔的说明符,其他可能的说明符是:%memargsbsdstartpidgiduid ...可以在手册页的“标准格式说明”部分中找到完整列表。例如:

 ps auxk -gid,-%mem | head -11


将打印10个具有最高组ID的进程,并在内部按内存使用情况进行排序。

评论


谢谢。正是我所需要的。

– RedFox
20年6月16日,0:08

#8 楼

命令行工具ps有其自己的排序选项,因此我更喜欢:

$ ps -eo pcpu,args --sort=-%cpu | head


您可以添加所需的列。通过ps手册页查看可用的其他选项。

$ man ps


#9 楼

这是我想出的东西,因为我发现原始答案有点太不可思议了。
因此,对于裸露的骨骼,请输入

ps -e -o pid,cmd,%cpu,%mem --sort=-%cpu | head -n 6


让我们理解每个做。当然,该图显示了当前进程的快照。 ps显示了系统上的每个进程-e定义了我们想要的结果格式,如您所见,我们将格式指定为-o,当然接下来是pid,cmd,%cpu,%mem进行排序。这里要注意的重要一点是,默认情况下,它按升序排序。同样,--sort也需要该参数进行排序,我们由--sort提供该参数,请注意-%cpu这是为了使其降序排序,并且我们首先获得了最高的CPU使用率。然后,将其输入到-中,这将为我们提供

    PID CMD                         %CPU %MEM
   5995 transmission-gtk             5.1  1.3
 402083 /usr/lib64/firefox/firefox   4.2  6.7
 978875 /usr/lib64/firefox/firefox   3.6  4.0
   2982 /usr/bin/gnome-shell         2.7  3.0
   2774 /usr/libexec/Xorg vt2 -disp  1.9  1.0



现在,我们了解了一些可以炫耀的基本知识。例如,您可以使用head -n 6每2秒更新一次列表,例如

watch "ps -e -o pid,cmd,%cpu,%mem --sort=-%cpu | head -n 6"


,或者,对于更喜欢的人,您可以安装一个名为watch的python软件包,在其中键入您的终端机tabulate,现在您可以使用一些pip install tabulate fu等真正炫耀了。

 ps -e -o pid,cmd,%cpu,%mem --sort=-%cpu | head -n 5 | tabulate -1 -f github | cut -f 2- -d "|" | sed '2s/----/    /' 


给出了如此漂亮的输出-

    |    PID | CMD                        |   %CPU |   %MEM |
    |--------|----------------------------|--------|--------|
    |   5995 | transmission-gtk           |    5.1 |    1.3 |
    | 978875 | /usr/lib64/firefox/firefox |    4.5 |    4.1 |
    | 402083 | /usr/lib64/firefox/firefox |    4.2 |    6.7 |
    |   2982 | /usr/bin/gnome-shell       |    2.7 |    3   |



为易于使用,避免反复键入此命令,您可以像这样将它们sed插入alias

alias top5="ps -e -o pid,cmd,%cpu,%mem --sort=-%cpu | head -n 6"


做完.bashrc后,您可以键入source .bashrc
或者,您可以只使用top5并按htop排序htop还可以使您杀死进程等等。

#10 楼

在Mac OS X上,top具有top -l numberOfSamples形式的记录模式选项(这似乎等效于GNU top的批处理模式)。但是,至少要有两个样本,因为“显示的第一个样本将为每个进程显示一个无效的%CPU,因为它是使用样本之间的差异计算的”(man 1 top)。

# examples
top -o cpu -l 2 -n 5 | tail -n 6
top -o cpu -l 2 -n 5 -stats pid,command,cpu | tail -n 6
top -o cpu -l 2 -n 5 -stats pid,command,cpu -U $(logname) | tail -n 6


#11 楼

top将显示正在使用的CPU。如果已安装,则htop允许您进行更细粒度的控制,包括在您的情况下通过CPU进行过滤。

#12 楼

我认为查看前5个cpu消耗过程的最简单方法是

ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head -n 5

要查看前5个cpu消耗过程是

ps -eo pid,comm,%cpu,%mem --sort=-%mem | head -n 5

其中,

-e:此标志用于选择所有进程。

-o:此标志用于格式化为用户定义的格式。

pid:此参数用于显示pid

comm:此参数仅用于显示命令名称。要获取完整的命令,请使用argscmdcommand

%cpu:此参数以“ ##。#”格式显示进程的CPU利用率百分比。在这里也可以使用pcpu

%mem:此参数显示进程的驻留集大小与计算机上物理内存的比率,以百分比表示。在这里也可以使用pmem

--sort:指定排序顺序。在=之后,-符号用于在顶部对最大值进行排序,其中默认选项+用于列出递增的数字顺序[即0到n]。

#13 楼

top -bn1 |sed -n '7,12'p也是一个不错的小班轮。
尽管我更喜欢将ps与--sort = X -o X,Y,Z

使用ps来获取不同的统计数据grep代表一个流程或用户,然后使用管道将其总计或平均到awk。