首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得系统上正在运行的进程的完整列表(至少包含它们的命令名和PID )以供文本处理使用?

如何获得系统上正在运行的进程的完整列表(至少包含它们的命令名和PID )以供文本处理使用?
EN

Unix & Linux用户
提问于 2022-08-07 07:27:17
回答 2查看 113关注 0票数 1

当我运行top时,我看到一个类似于此的屏幕,

代码语言:javascript
复制
    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),我看到它也有某种标题,

代码语言:javascript
复制
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将用于附加调试器。

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 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使用量),用于监视目的:

代码语言:javascript
复制
ps -eo pid=,rss=,comm=

示例输出:

代码语言:javascript
复制
3874689  9104 sshd
3875080  8788 sshd

comm=替换为args=会产生:

代码语言:javascript
复制
3874689  9104 sshd: userone [priv]
3875080  8788 sshd: usertwo [priv]

也就是说,args生成一个带有参数的命令名,这很可能是从ps中得到的。

更详细地阅读有关这些选项的手册页是个好主意,包括在STANDARD FORMAT SPECIFIERS描述中引用的-o部分。为了清楚起见,我没有复制上面的全部描述。对它们进行实验并确保您理解输出格式(包括分隔符)也是一个好主意。

其他用途:

我将ps -o%cpu%mem说明符以及etimeetimesbsdstartlstart一起使用。当您想要ps的流程列表特性但希望在脚本/代码中解析更简单的输出时,它可能非常有用。

票数 1
EN

Unix & Linux用户

发布于 2022-09-18 05:42:42

最后,我使用了ps -e的输出。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/712704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档