mcpField
P
procs

procs

官方Agent-ready
github.com开发者工具6.2kprocs2 天前更新
代码仓库访问官网

关于 procs

procs 是 ps 命令的现代替代品,提供快速进程查询和直观的展示方式。支持按关键词搜索进程,以树形结构显示进程关系,并突出显示相关信息。

主要功能

  1. 01按名称或关键词快速搜索进程
  2. 02以树形结构显示进程父子关系
  3. 03自定义进程列表的显示列

适用场景

  1. 01编码 Agent 需要监控特定进程状态时快速查询
  2. 02在脚本中过滤和解析进程信息
  3. 03调试应用程序时追踪进程树

安装

选择你的系统或包管理器,复制命令到终端运行。

$
brew install procs

安装完成后运行procs --version确认安装成功。

命令示例

常用命令按使用顺序排列。

01
procs
02
procs node

详细介绍

procs

procs 是一个使用 Rust 编写的 ps 替代工具。

Actions Status

Changelog Crates.io procs homebrew

文档快速链接

功能

  • 彩色且易于阅读的输出
    • 根据终端背景自动检测主题
  • 多列关键词搜索
  • 提供 ps 不支持的一些额外信息
    • TCP/UDP 端口
    • 读写吞吐量
    • Docker 容器名称
    • 更多内存信息
  • 支持分页器
  • 监视模式(类似 top)
  • 树状视图

平台

  • 支持 Linux。
  • 实验性支持 macOS。
    • 仅在 GitHub Actions 环境中检查 macOS 版本。
    • 欢迎反馈由真实设备导致的问题。
  • 支持 Windows。
  • 实验性支持 FreeBSD。

安装

下载二进制文件

从发布页面下载,并解压到 PATH 中的目录。

Packaging status
Nixpkgs

你可以从 Nixpkgs 安装。

nix-env --install procs
snapcraft

你可以从 snapcraft 安装。

sudo snap install procs
homebrew

你可以从 homebrew 安装。

brew install procs
MacPorts

你可以从 MacPorts 安装。

sudo port install procs
Alpine Linux

你可以从 Alpine Linux 软件仓库安装。

在运行 apk add 前,应启用正确的软件仓库(最新信息请参阅上方链接)。

sudo apk add procs
Arch Linux

你可以从 Arch Linux extra 软件仓库安装。

sudo pacman -S procs
Scoop

你可以使用 scoop 安装。

scoop install procs
Fedora
sudo dnf install procs
Windows
winget install procs
RPM

你可以使用 rpm 安装。

sudo rpm -i https://github.com/dalance/procs/releases/download/v0.14.12/procs-0.14.12-1.x86_64.rpm
Cargo

你可以使用 cargo 安装。

cargo install procs
X-CMD

你可以使用 x-cmd 安装。

x env use procs
# or
x procs # Download procs, and invoke procs in a way that does not affect the current environment

安装说明

权限问题

在 macOS 上,普通用户无法访问其他用户进程的任何信息。 在 Linux 上,普通用户无法访问其他用户进程的部分信息(例如读写吞吐量)。

如果要显示这些信息,应使用 sudo。

$ sudo procs
[sudo] password for ...:

如果想跳过密码输入,可以将以下条目添加到 /etc/sudoers。

[user or group] ALL= NOPASSWD: [procs binary path]
// ex. myuser ALL= NOPASSWD: /usr/local/bin/procs

用法

以下截图使用 config/large.toml 作为配置。

显示所有进程

只需输入 procs。它会显示所有进程的信息。

procs

procs

按非数字关键词搜索

如果将任意关键词作为参数添加,默认会匹配 USER、Command。

procs zsh

如果想添加与非数字关键词匹配的列,可以在配置文件中使用 nonnumeric_search 选项。

procs_zsh

按数字关键词搜索

如果关键词是数字,默认会与 PID 匹配。 数字默认进行精确匹配,非数字默认进行部分匹配。

procs --or 6000 60000 60001 16723

如果想添加与数字关键词匹配的列,可以在配置文件中使用 numeric_search 选项。

procs_port

请注意,procfs 权限只允许识别当前用户拥有的进程正在监听的端口,因此除非以 root 身份运行,否则不会显示所有端口。

搜索关键词的逻辑运算

如果有多个关键词,可以通过命令行选项指定关键词之间的逻辑运算。

  • --and:显示与所有关键词都匹配的进程。
  • --or:显示与任意关键词匹配的进程。
  • --nand:显示与所有关键词都不匹配的进程。
  • --nor:显示与任意关键词都不匹配的进程。

可以在配置文件的 [search] 部分指定默认运算。

显示 Docker 容器名称

如果你有权访问 Docker 守护进程(unix:///var/run/docker.sock),则会添加 Docker 列。

procs growi

procs_docker

请注意,procs 通过 UNIX 域套接字获取容器信息,因此不支持 macOS 上的 Docker Toolbox(它不使用 UNIX 域套接字)。 支持 Docker Desktop for Mac,但尚未测试。

分页器

如果输出行数超过终端高度,将自动使用分页器。 此行为和分页器命令可以通过配置文件指定。

Linux / macOS

在 Linux 和 macOS 上,默认分页器为 less。 如果没有 less,则使用 more。 也可以通过配置 use_builtin 使用内置分页器。

Windows

在 Windows 上始终使用内置分页器。

监视模式

使用 --watch 或 --watch-interval <second> 选项时,procs 会像 top 一样自动更新输出。 使用 --watch 时,更新间隔为 1s。 可以通过 --watch-interval 的参数指定更新间隔。 还有一些用于控制的键盘快捷键。

  • n:将排序列切换为下一列
  • p:将排序列切换为上一列
  • a:将排序顺序改为升序
  • d:将排序顺序改为降序
  • q:退出
树视图

使用 --tree 选项时,进程会按依赖顺序排序,并在左侧显示依赖树。

procs --tree

procs_tree

如果配置中存在 TreeSlot 列,依赖树将显示在该列的位置。

排序列

可以通过 --sorta 或 --sortd 选项更改列的排序顺序。 --sorta 和 --sortd 的最后一个字符表示排序顺序:“a”表示升序,“d”表示降序。

通过选项关键词选择要排序的列。 关键词与 --list 选项显示的列类型匹配。 如果使用 --sorta cputime,则按 CpuTime 列升序排序。 如果使用 --sortd rss,则按 VmRss 列降序排序。 关键词采用部分匹配,且不区分大小写。

可以在配置文件的 [sort] 部分指定默认排序方式。

procs --sortd cpu

procs_sort

插入列

--insert 选项会在 Slot 列或 MultiSlot 列的位置插入新列。 要插入的列由选项关键字指定。 关键字与排序选项相同。 插入的列可以使用一个 Slot 列。 如果需要插入多列,则应添加多个 Slot 列。 多个插入列可以使用一个 MultiSlot 列。 如果存在 MultiSlot,所有剩余列都会插入到该 MultiSlot 中,后续的 Slot / MultiSlot 不会使用。 未使用的 Slot / MultiSlot 不会显示。

Shell 补全

--gen-completion 选项会在当前目录下生成 Shell 补全文件。 支持以下 Shell。

  • zsh
  • bash
  • fish
  • powershell
  • elvish

--gen-completion-out 选项会将 Shell 补全内容输出到 stdout。 在某些 Shell 中,可以直接 source 该内容。

source <(procs --gen-completion-out bash)

配置

配置路径

你可以通过编写配置文件来更改配置。 此仓库的 config 目录中提供了一些配置示例。 config/large.toml 是 procs v0.9.21 之前的默认配置。

配置文件的位置因操作系统而异:

  • Linux:~/.config/procs/config.toml、/etc/procs/procs.toml
  • macOS:~/Library/Preferences/com.github.dalance.procs/config.toml、/etc/procs/procs.toml
  • Windows:~/AppData/Roaming/dalance/procs/config/config.toml

为保持兼容,如果 ~/.procs.toml 存在,则会优先使用该文件,而非操作系统特定的位置。

从命令行指定配置

--use-config 选项可以指定内置配置。 --load-config 选项可以指定配置文件路径。

配置示例

可以通过 --gen-config 选项生成完整的配置文件示例。

[[columns]]
kind = "Pid"
style = "BrightYellow|Yellow"
numeric_search = true
nonnumeric_search = false

[[columns]]
kind = "Username"
style = "BrightGreen|Green"
numeric_search = false
nonnumeric_search = true
align = "Right"

[style]
header = "BrightWhite|Black"
unit = "BrightWhite|Black"
tree = "BrightWhite|Black"

[style.by_percentage]
color_000 = "BrightBlue|Blue"
color_025 = "BrightGreen|Green"
color_050 = "BrightYellow|Yellow"
color_075 = "BrightRed|Red"
color_100 = "BrightRed|Red"

[style.by_state]
color_d = "BrightRed|Red"
color_r = "BrightGreen|Green"
color_s = "BrightBlue|Blue"
color_t = "BrightCyan|Cyan"
color_z = "BrightMagenta|Magenta"
color_x = "BrightMagenta|Magenta"
color_k = "BrightYellow|Yellow"
color_w = "BrightYellow|Yellow"
color_p = "BrightYellow|Yellow"

[style.by_unit]
color_k = "BrightBlue|Blue"
color_m = "BrightGreen|Green"
color_g = "BrightYellow|Yellow"
color_t = "BrightRed|Red"
color_p = "BrightRed|Red"
color_x = "BrightBlue|Blue"

[search]
numeric_search = "Exact"
nonnumeric_search = "Partial"
logic = "And"

[display]
show_self = false
show_thread = false
show_thread_in_tree = true
cut_to_terminal = true
cut_to_pager = false
cut_to_pipe = false
color_mode = "Auto"

[sort]
column = 0
order = "Ascending"

[docker]
path = "unix:///var/run/docker.sock"

[pager]
mode = "Auto"
[[columns]] 部分

[[columns]] 部分定义要使用的列。 第一个 [[columns]] 显示在最左侧,最后一个显示在最右侧。

键值默认值描述
kind参见 kind 列表列类型
style参见 style 列表列样式
numeric_searchtrue、falsefalse列是否可与数字关键字匹配
nonnumeric_searchtrue、falsefalse列是否可与非数字关键字匹配
alignLeft、Right、CenterLeft文本对齐方式
max_width[Number]列的最大宽度
min_width[Number]列的最小宽度
header[String]替代表头描述
kind 列表
procs kindps 标准格式描述LinuxmacOSWindowsFreeBSD
Arch-不支持-二进制文件的架构oo
Ccgroup-不支持-压缩格式的控制组o
Cgroupcgroup控制组o
Commandargs带有所有参数的命令oooo
ContextSw-不支持-上下文切换次数ooo
CpuTimecputime累计 CPU 时间oooo
Docker-不支持-Docker 容器名称oo
Eipeip指令指针o
ElapsedTime-不支持-已用时间oooo
Enve 输出修饰符环境变量oo
Espesp栈指针o
FileNamecomm文件名ooo
Gidegid组 IDoooo
GidFsfgid文件系统组 IDo
GidRealrgid实际组 IDooo
GidSavedsgid保存的组 IDooo
Groupegroup组名oooo
GroupFsfgroup文件系统组名o
GroupRealrgroup实际组名ooo
GroupSavedsgroup保存的组名ooo
InvoluntaryContextSw-不支持-非自愿上下文切换次数oo
MajFltmaj_flt主缺页次数oooo
MinFltmin_flt次缺页次数ooo
MultiSlot-不支持---insert 选项的槽位oooo
NiceniNice 值ooo
Pgidpgid进程组 IDooo
Pidpid进程 ID(或用 [] 括起来的线程 ID)oooo
Policypolicy调度策略oo
Ppidppid父进程 IDoooo
Prioritypri优先级oooo
Processorpsr当前分配的处理器oo
ReadBytes-不支持-从存储设备读取的字节数oooo
RecvBytes-不支持-每秒接收的字节数(Windows 11)o
RtPriorityrtprio内核基础优先级(Windows)/ 实时优先级(Linux)oo
SecContextlabel安全上下文o
SendBytes-不支持-每秒发送的字节数(Windows 11)o
Separator-不支持-用 | 分隔列oooo
Sessionsid会话 IDoooo
ShdPndpending进程的待处理信号掩码oo
SigBlkblocked已阻塞的信号掩码oo
SigCgtcaught已捕获的信号掩码oo
SigIgnignored已忽略的信号掩码oo
SigPndpending线程的待处理信号掩码o
Slot-不支持---insert 选项的槽位oooo
Ssb-不支持-推测存储绕过状态o
StartTimestart_time启动时间oooo
States进程状态oooo
TcpPort-不支持-绑定的 TCP 端口ooo
Threadsnlwp线程数oooo
TreeSlot-不支持-树形列的槽位oooo
Ttytty控制 TTYooo
UdpPort-不支持-绑定的 UDP 端口oo
Uideuid用户 IDoooo
UidFsfuid文件系统用户 IDo
UidLogin-不支持-登录用户 IDo
UidRealruid实际用户 IDooo
UidSavedsuid保存的用户 IDooo
UsageCpu%cpuCPU 使用率oooo
UsageMem%mem内存使用率oooo
Usereuser用户名oooo
UserFsfuser文件系统用户名o
UserLogin-不支持-登录用户名o
UserRealruser实际用户名ooo
UserSavedsuser保存的用户名ooo
VmData-不支持-数据大小oo
VmExetrs文本段大小oo
VmHwm-不支持-峰值常驻集大小ooo
VmLib-不支持-库代码大小o
VmLock-不支持-锁定内存大小o
VmPeak-不支持-峰值虚拟内存大小oo
VmPin-不支持-固定内存大小oo
VmPte-不支持-页表项大小o
VmRssrss常驻集大小oooo
VmSizevsz物理页大小oooo
VmStack-不支持-栈大小oo
VmSwap-不支持-换出的虚拟内存大小oo
VmTotal-不支持-虚拟内存总大小*1o*1*1
VoluntaryContextSw-不支持-自愿上下文切换次数oo
Wchanwchan进程休眠时所在的内核函数oo
WorkDir-不支持-当前工作目录oo
WriteByte-不支持-写入存储设备的字节数oooo
style 列表
  • BrightBlack
  • BrightRed
  • BrightGreen
  • BrightYellow
  • BrightBlue
  • BrightMagenta
  • BrightCyan
  • BrightWhite
  • Black
  • Red
  • Green
  • Yellow
  • Blue
  • Magenta
  • Cyan
  • White
  • Color256
  • ByPercentage
  • ByState
  • ByUnit

有一些特殊样式,例如 ByPercentage、ByState、ByUnit。 这些样式用于根据值着色。 例如,如果选择 ByUnit,则可以为每个值单位指定颜色(如 K、M、G 等)。 可以在 [style.by_unit] 部分配置颜色。

其他颜色的配置方式与 color 相同。

[style] 部分

[style] 部分定义标题、单位和各样式的颜色。 可用颜色列表如下。

子部分键值默认值描述
header参见 color 列表BrightWhite|Black标题颜色
unit参见 color 列表BrightWhite|Black单位颜色
tree参见 color 列表BrightWhite|Black树形结构颜色
by_percentagecolor_000参见 color 列表BrightBlue|Blue0% - 25% 时的颜色
by_percentagecolor_025参见 color 列表BrightGreen|Green25% - 50% 时的颜色
by_percentagecolor_050参见 color 列表BrightYellow|Yellow50% - 75% 时的颜色
by_percentagecolor_075参见 color 列表BrightRed|Red75% - 100% 时的颜色
by_percentagecolor_100参见 color 列表BrightRed|Red100% 及以上时的颜色
by_statecolor_d参见 color 列表BrightRed|Red状态为 D 时的颜色
by_statecolor_r参见 color 列表BrightGreen|Green状态为 R 时的颜色
by_statecolor_s参见 color 列表BrightBlue|Blue状态为 S 时的颜色
by_statecolor_t参见 color 列表BrightCyan|Cyan状态为 T 时的颜色
by_statecolor_z参见 color 列表BrightMagenta|Magenta状态为 Z 时的颜色
by_statecolor_x参见 color 列表BrightMagenta|Magenta状态为 X 时的颜色
by_statecolor_k参见 color 列表BrightYellow|Yellow状态为 K 时的颜色
by_statecolor_w参见 color 列表BrightYellow|Yellow状态为 W 时的颜色
by_statecolor_p参见 color 列表BrightYellow|Yellow状态为 P 时的颜色
by_unitcolor_k参见 color 列表BrightBlue|Blue单位为 K 时的颜色
by_unitcolor_m参见 color 列表BrightGreen|Green单位为 M 时的颜色
by_unitcolor_g参见 color 列表BrightYellow|Yellow单位为 G 时的颜色
by_unitcolor_t参见 color 列表BrightRed|Red单位为 T 时的颜色
by_unitcolor_p参见 color 列表BrightRed|Red单位为 P 时的颜色
by_unitcolor_x参见 color 列表BrightBlue|Blue其他单位的颜色
color 列表
  • BrightBlack
  • BrightRed
  • BrightGreen
  • BrightYellow
  • BrightBlue
  • BrightMagenta
  • BrightCyan
  • BrightWhite
  • Black
  • Red
  • Green
  • Yellow
  • Blue
  • Magenta
  • Cyan
  • White
  • Color256

可以通过 | 为不同主题配置颜色。

style = "BrightWhite|Black" # BrightWhite for dark theme and Black for light theme
style = "BrightWhite"       # BrightWhite for both theme

第一个颜色用于深色主题,第二个颜色用于浅色主题。 如果只指定一种颜色,该颜色将应用于两种主题。

Color256 可以指定为 0-255 之间的值,如下所示:

style = "223|112" # 223 for dark theme and 112 for light theme
style = "223"     # 223 for both theme
[search] 部分

[search] 部分定义了关键字搜索选项。

键值默认值描述
numeric_searchExact, PartialExact数字关键字是精确匹配还是部分匹配
nonnumeric_searchExact, PartialPartial非数字关键字是精确匹配还是部分匹配
logicAnd, Or, Nand, NorAnd关键字之间的逻辑运算
caseSmart, Insensitive, SensitiveSmart搜索时的大小写敏感设置
case

case 用于设置搜索时的大小写敏感程度。

  • Smart:如果关键字包含大写字母,则进行区分大小写的搜索;否则进行不区分大小写的搜索
  • Insensitive:不区分大小写
  • Sensitive:区分大小写
[display] 区段

[display] 区段定义输出显示选项。

KeyValueDefaultDescription
show_selftrue, falsefalse是否显示自身进程( procs )
show_self_parentstrue, falsefalse是否显示那些仅以自身进程为子进程的父进程
show_threadtrue, falsefalse是否显示线程信息(仅限 Linux)
show_thread_in_treetrue, falsetrue是否在树形模式下显示线程信息(仅限 Linux)
show_parent_in_treetrue, falsetrue是否在树形模式下显示父进程
show_children_in_treetrue, falsetrue是否在树形模式下显示子进程
show_headertrue, falsetrue是否显示表头行
show_footertrue, falsefalse是否显示页脚行
show_kthreadstrue, falsetrue是否显示属于 kthread 的进程(仅限 Linux)
cut_to_terminaltrue, falsetrue是否截断输出行以适应终端输出
cut_to_pagertrue, falsefalse是否截断输出行以适应分页器
cut_to_pipetrue, falsefalse是否截断输出行以适应管道
color_modeAuto, Always, DisableAuto未使用 --color 命令行选项时输出颜色的默认行为
separator[String]│用作分隔符的字符串
ascending[String]▲升序排序指示符
descending[String]▼降序排序指示符
tree_symbols[String; 5][│, ─, ┬, ├, └]树形视图使用的符号
abbr_sidtrue, falsetrue是否缩写计算机 SID(仅限 Windows)
themeAuto, Dark, LightAuto默认主题

如果 color_mode 为 Auto,则终端和分页器启用颜色,管道禁用颜色。

如果 theme 为 Auto,则会自动检测终端主题。 某些终端不支持自动检测,因此可以显式指定 Dark 或 Light。

abbr_sid

Windows SID 过长,因此默认会缩写。 如果 abbr_sid 为 false,则会完整显示 SID,如下所示:

S-1-5-21-789457439-2186958450-1652286173-1001

如果 abbr_sid 为 true,则会显示 SID 的缩写形式,如下所示:

S-1-5-21-...-1001
[sort] 部分

[sort] 部分定义用于排序的列和排序顺序。

键值默认值描述
column[Number]0用于排序的列号
orderAscending, DescendingAscending排序顺序

如果 column 为 0,则按左侧列的值排序。

[docker] 部分

[docker] 部分定义与 docker 守护进程通信的方式。

键值默认值描述
path[Path]unix:///var/run/docker.sock连接到 docker 守护进程的 UNIX 域套接字
[pager] 部分

[pager] 部分定义分页器的行为。

键值默认值描述
modeAuto, Always, DisableAuto未使用 --pager 命令行选项时分页器的默认行为
detect_widthtrue, falsefalseauto 模式是否检测终端宽度溢出
use_builtintrue, falsefalse是否使用内置分页器
command[Command]less -SR分页器命令

如果 mode 为 Auto,则仅当输出行数超过终端高度时才使用分页器。 默认分页器为 less -SR(如果找不到 less,则使用 more -f)。

Footnotes

  1. 在这些平台上是 VmRss 的别名 ↩ ↩2 ↩3

评论

支持 Markdown