当我运行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将用于附加调试器。
发布于 2022-09-19 00:00:49
我在ps -o输出格式字段名方面非常成功。在Linux ps(1)手册页中,输出说明符被提到了几次:
首先,简单介绍一下EXAMPLES部分:
以用户定义的格式查看每个进程: ps -eo pid、tid、class、rtprio、ni、pri、psr、pcpu、stat、wchan:14、comm ps axo stat、euid、ruid、tty、tpgid、sess、pgrp、ppid、pcpu、comm ps -Ao pid、tt、user、fname、tmout、f、wchan。
手册页的OUTPUT FORMAT CONTROL部分提供了选项的详细信息:
-o格式用户定义格式.format是以空格分隔或逗号分隔的列表形式的单个参数,它提供了一种指定单个输出列的方法。可识别的关键字在下面的标准格式说明部分中描述。标头可以按需要重命名(ps -o pid,ruser=RealUser -o comm=Command)。如果所有列标题都为空(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与%cpu和%mem说明符以及etime、etimes、bsdstart和lstart一起使用。当您想要ps的流程列表特性但希望在脚本/代码中解析更简单的输出时,它可能非常有用。
发布于 2022-09-18 05:42:42
最后,我使用了ps -e的输出。
https://unix.stackexchange.com/questions/712704
复制相似问题