我想按 cpu 使用百分比对一个用户的进程进行排序。我试过这个
ps aux|tr -s " "|cut -f3 -d " "| sort -| grep "user" > file name
这有用吗?
答案1
ps
允许您指定输出中的列以及排序顺序。根据您的要求,后处理甚至可能不需要额外的命令。
以下命令提供指定用户进程的列表,按 CPU 使用率百分比排序。 (该head
命令仅用于限制输出)。
[root@testvm ~]# ps -o pid,uname,pcpu,command -u root --sort=-pcpu | head
PID USER %CPU COMMAND
1 root 0.5 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
664 root 0.4 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
1226 root 0.2 sshd: root@pts/0
1261 root 0.2 [kworker/0:0]
9 root 0.1 [rcu_sched]
20 root 0.1 [kworker/0:1]
293 root 0.1 [kworker/0:1H]
875 root 0.1 -bash
1008 root 0.1 /usr/bin/python -Es /usr/sbin/tuned -l -P
该-o
选项在此指定输出格式,即以下列:进程 ID、用户名、CPU 使用率和命令。
该-u
选项限制ps
特定用户的进程,在本例中为 root。
该--sort
选项定义排序顺序,即 CPU 使用率的百分比。前缀-
符号定义按降序排序。
答案2
我会考虑将初始检索限制为特定用户并排序,然后可能进行剪切。
ps hux -u USER | sort -k3 -n
通过采用这种方法,进程已经仅限于特定用户。然后对整个检索过程执行排序。然后,如果需要的话,可以通过管道将其传送到tr
和cut
特定字段。
参数:
h
:抑制标头
u
:面向用户的格式
x
:BSD 删除 tty 要求
-u
USER :应为其选择进程的特定用户。请注意,这可能是一个列表。
答案3
我会这样做:
ps aux | grep user | sort -rk3 > file_name
阅读sort -rk3
关于man sort
关于你的一些事情:
空格很重要,bash 不知道这
file name
是一个文件,它会将输出重定向到一个名为 的文件file
,然后想知道如何处理name
.如果必须在文件名中添加空格,则必须用引号引起来:... > "file name"
.许多 Linux 应用程序都很聪明,可以在不计算/折叠空格的情况下挑选列。如果我只想要百分比,我会这样做:
ps aux | grep user | sort -rk3 | awk '{print $3}'
cut
可能也是这样聪明,只是我不太熟悉。您可能还会考虑
top -bn1 | grep user
哪个做类似的事情