当我跑步时,top
我看到类似这样的屏幕,
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
654 root 20 0 25.5g 147780 70084 S 3.7 0.9 72:08.69 Xorg
1687 me 20 0 9165008 1.4g 268488 S 1.3 8.9 163:06.01 qutebrowser
316 root -51 0 0 0 0 S 0.7 0.0 1:09.86 irq/51-DELL095A:00
683 me 20 0 810360 58212 41792 S 0.7 0.4 12:35.61 picom
702 me 20 0 246876 18032 14616 S 0.7 0.1 26:04.86 i3bar
827 me 20 0 665528 16316 9980 S 0.7 0.1 32:41.79 conky
2874827 me 20 0 6008688 209960 123060 S 0.7 1.3 0:10.84 QtWebEngineProc
675 me 20 0 175796 24656 15216 S 0.3 0.2 0:14.27 i3
771 me 9 -11 1022184 21952 12056 S 0.3 0.1 82:23.43 pulseaudio
但该程序是交互式的,所以我看到屏幕随着时间的推移而变化(这没关系,因为信息确实随着时间的推移而变化)。此外,top | grep whatever
似乎永远不会回来。
如果我想要该状态的快照以将其发送到文本处理实用程序怎么办?
评论建议选择top -b -n 1
,但如果我将其通过管道传输到其他程序(或者,为了简单起见,如果我> some-file
),我会看到它也有某种标题,
top - 21:35:47 up 5 days, 7:24, 1 user, load average: 0.16, 0.41, 0.37
Tasks: 243 total, 1 running, 241 sleeping, 1 stopped, 0 zombie
%Cpu(s): 2.3 us, 3.1 sy, 0.0 ni, 93.8 id, 0.0 wa, 0.0 hi, 0.8 si, 0.0 st
MiB Mem : 15787.2 total, 1840.9 free, 5693.1 used, 8253.3 buff/cache
MiB Swap: 16384.0 total, 16375.2 free, 8.8 used. 6256.7 avail Mem
如果能有一个关于所有正在运行的进程的干净的表格报告就好了,仅此而已。
我应该使用除 之外的实用程序吗top
?
也许是ps -e
我应该追求的?
我计划使用此解决方案的场景是调试器的 PID 选择器:用户将写入进程的名称,PID 选择器将根据该名称过滤正在运行的进程列表;然后当用户选择所需的进程时,相应的PID用于附加调试器。
答案1
ps -o
我在输出格式字段名称方面非常成功。 Linux 手册页早期多次提到输出说明符ps(1)
:
首先简单介绍一下这个EXAMPLES
部分:
要使用用户定义的格式查看每个进程:
ps -eo pid、tid、类、rtprio、ni、pri、psr、pcpu、stat、wchan:14、comm
ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm ps -Ao pid,tt,用户,fname,tmout,f,wchan
手册页的OUTPUT FORMAT CONTROL
部分包含该选项的详细信息:
-o format
用户定义的格式。 format 是空格分隔或逗号分隔列表形式的单个参数,它提供了一种指定各个输出列的方法。已识别的关键字在标准格式说明符下面的部分。标题可以重命名(ps -o pid,ruser=真实用户 -o comm=命令) 如预期的。如果所有列标题均为空 (ps -o pid= -o comm=) 那么标题行将不会被输出。
例子:
最近,我使用它作为一种轻量级方法来获取进程的驻留集大小(RAM 使用情况)以进行监视:
ps -eo pid=,rss=,comm=
输出示例:
3874689 9104 sshd
3875080 8788 sshd
替换comm=
为args=
产生:
3874689 9104 sshd: userone [priv]
3875080 8788 sshd: usertwo [priv]
即,args
生成带有参数的命令名称,这可能更符合ps
.
最好详细阅读有关这些选项的手册页,包括描述STANDARD FORMAT SPECIFIERS
中引用的部分-o
。为了清楚起见,我没有复制上面的整个描述。尝试它们并确保您了解输出格式(包括分隔符)也是一个好主意。
其他用途:
我已将ps -o
the%cpu
和%mem
说明符以及etime
, etimes
, bsdstart
, 和一起使用lstart
。当您想要列出进程的功能ps
但希望在脚本/代码中解析更简单的输出时,它会非常有用。
答案2
最终我使用了 的输出ps -e
。