关于 procs
procs 是 ps 命令的现代替代品,提供快速进程查询和直观的展示方式。支持按关键词搜索进程,以树形结构显示进程关系,并突出显示相关信息。
主要功能
- 01按名称或关键词快速搜索进程
- 02以树形结构显示进程父子关系
- 03自定义进程列表的显示列
适用场景
- 01编码 Agent 需要监控特定进程状态时快速查询
- 02在脚本中过滤和解析进程信息
- 03调试应用程序时追踪进程树
安装
选择你的系统或包管理器,复制命令到终端运行。
安装完成后运行procs --version确认安装成功。
命令示例
常用命令按使用顺序排列。
详细介绍
procs
procs 是一个使用 Rust 编写的 ps 替代工具。
文档快速链接
功能
- 彩色且易于阅读的输出
- 根据终端背景自动检测主题
- 多列关键词搜索
- 提供
ps不支持的一些额外信息- TCP/UDP 端口
- 读写吞吐量
- Docker 容器名称
- 更多内存信息
- 支持分页器
- 监视模式(类似
top) - 树状视图
平台
- 支持 Linux。
- 实验性支持 macOS。
- 仅在 GitHub Actions 环境中检查 macOS 版本。
- 欢迎反馈由真实设备导致的问题。
- 支持 Windows。
- 实验性支持 FreeBSD。
安装
下载二进制文件
从发布页面下载,并解压到 PATH 中的目录。
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

按非数字关键词搜索
如果将任意关键词作为参数添加,默认会匹配 USER、Command。
procs zsh
如果想添加与非数字关键词匹配的列,可以在配置文件中使用 nonnumeric_search 选项。

按数字关键词搜索
如果关键词是数字,默认会与 PID 匹配。
数字默认进行精确匹配,非数字默认进行部分匹配。
procs --or 6000 60000 60001 16723
如果想添加与数字关键词匹配的列,可以在配置文件中使用 numeric_search 选项。

请注意,procfs 权限只允许识别当前用户拥有的进程正在监听的端口,因此除非以 root 身份运行,否则不会显示所有端口。
搜索关键词的逻辑运算
如果有多个关键词,可以通过命令行选项指定关键词之间的逻辑运算。
--and:显示与所有关键词都匹配的进程。--or:显示与任意关键词匹配的进程。--nand:显示与所有关键词都不匹配的进程。--nor:显示与任意关键词都不匹配的进程。
可以在配置文件的 [search] 部分指定默认运算。
显示 Docker 容器名称
如果你有权访问 Docker 守护进程(unix:///var/run/docker.sock),则会添加 Docker 列。
procs growi

请注意,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

如果配置中存在 TreeSlot 列,依赖树将显示在该列的位置。
排序列
可以通过 --sorta 或 --sortd 选项更改列的排序顺序。
--sorta 和 --sortd 的最后一个字符表示排序顺序:“a”表示升序,“d”表示降序。
通过选项关键词选择要排序的列。
关键词与 --list 选项显示的列类型匹配。
如果使用 --sorta cputime,则按 CpuTime 列升序排序。
如果使用 --sortd rss,则按 VmRss 列降序排序。
关键词采用部分匹配,且不区分大小写。
可以在配置文件的 [sort] 部分指定默认排序方式。
procs --sortd cpu

插入列
--insert 选项会在 Slot 列或 MultiSlot 列的位置插入新列。
要插入的列由选项关键字指定。
关键字与排序选项相同。
插入的列可以使用一个 Slot 列。
如果需要插入多列,则应添加多个 Slot 列。
多个插入列可以使用一个 MultiSlot 列。
如果存在 MultiSlot,所有剩余列都会插入到该 MultiSlot 中,后续的 Slot / MultiSlot 不会使用。
未使用的 Slot / MultiSlot 不会显示。
Shell 补全
--gen-completion 选项会在当前目录下生成 Shell 补全文件。
支持以下 Shell。
zshbashfishpowershellelvish
--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_search | true、false | false | 列是否可与数字关键字匹配 |
| nonnumeric_search | true、false | false | 列是否可与非数字关键字匹配 |
| align | Left、Right、Center | Left | 文本对齐方式 |
| max_width | [Number] | 列的最大宽度 | |
| min_width | [Number] | 列的最小宽度 | |
| header | [String] | 替代表头描述 |
kind 列表
procs kind | ps 标准格式 | 描述 | Linux | macOS | Windows | FreeBSD |
|---|---|---|---|---|---|---|
| Arch | -不支持- | 二进制文件的架构 | o | o | ||
| Ccgroup | -不支持- | 压缩格式的控制组 | o | |||
| Cgroup | cgroup | 控制组 | o | |||
| Command | args | 带有所有参数的命令 | o | o | o | o |
| ContextSw | -不支持- | 上下文切换次数 | o | o | o | |
| CpuTime | cputime | 累计 CPU 时间 | o | o | o | o |
| Docker | -不支持- | Docker 容器名称 | o | o | ||
| Eip | eip | 指令指针 | o | |||
| ElapsedTime | -不支持- | 已用时间 | o | o | o | o |
| Env | e 输出修饰符 | 环境变量 | o | o | ||
| Esp | esp | 栈指针 | o | |||
| FileName | comm | 文件名 | o | o | o | |
| Gid | egid | 组 ID | o | o | o | o |
| GidFs | fgid | 文件系统组 ID | o | |||
| GidReal | rgid | 实际组 ID | o | o | o | |
| GidSaved | sgid | 保存的组 ID | o | o | o | |
| Group | egroup | 组名 | o | o | o | o |
| GroupFs | fgroup | 文件系统组名 | o | |||
| GroupReal | rgroup | 实际组名 | o | o | o | |
| GroupSaved | sgroup | 保存的组名 | o | o | o | |
| InvoluntaryContextSw | -不支持- | 非自愿上下文切换次数 | o | o | ||
| MajFlt | maj_flt | 主缺页次数 | o | o | o | o |
| MinFlt | min_flt | 次缺页次数 | o | o | o | |
| MultiSlot | -不支持- | --insert 选项的槽位 | o | o | o | o |
| Nice | ni | Nice 值 | o | o | o | |
| Pgid | pgid | 进程组 ID | o | o | o | |
| Pid | pid | 进程 ID(或用 [] 括起来的线程 ID) | o | o | o | o |
| Policy | policy | 调度策略 | o | o | ||
| Ppid | ppid | 父进程 ID | o | o | o | o |
| Priority | pri | 优先级 | o | o | o | o |
| Processor | psr | 当前分配的处理器 | o | o | ||
| ReadBytes | -不支持- | 从存储设备读取的字节数 | o | o | o | o |
| RecvBytes | -不支持- | 每秒接收的字节数(Windows 11) | o | |||
| RtPriority | rtprio | 内核基础优先级(Windows)/ 实时优先级(Linux) | o | o | ||
| SecContext | label | 安全上下文 | o | |||
| SendBytes | -不支持- | 每秒发送的字节数(Windows 11) | o | |||
| Separator | -不支持- | 用 | 分隔列 | o | o | o | o |
| Session | sid | 会话 ID | o | o | o | o |
| ShdPnd | pending | 进程的待处理信号掩码 | o | o | ||
| SigBlk | blocked | 已阻塞的信号掩码 | o | o | ||
| SigCgt | caught | 已捕获的信号掩码 | o | o | ||
| SigIgn | ignored | 已忽略的信号掩码 | o | o | ||
| SigPnd | pending | 线程的待处理信号掩码 | o | |||
| Slot | -不支持- | --insert 选项的槽位 | o | o | o | o |
| Ssb | -不支持- | 推测存储绕过状态 | o | |||
| StartTime | start_time | 启动时间 | o | o | o | o |
| State | s | 进程状态 | o | o | o | o |
| TcpPort | -不支持- | 绑定的 TCP 端口 | o | o | o | |
| Threads | nlwp | 线程数 | o | o | o | o |
| TreeSlot | -不支持- | 树形列的槽位 | o | o | o | o |
| Tty | tty | 控制 TTY | o | o | o | |
| UdpPort | -不支持- | 绑定的 UDP 端口 | o | o | ||
| Uid | euid | 用户 ID | o | o | o | o |
| UidFs | fuid | 文件系统用户 ID | o | |||
| UidLogin | -不支持- | 登录用户 ID | o | |||
| UidReal | ruid | 实际用户 ID | o | o | o | |
| UidSaved | suid | 保存的用户 ID | o | o | o | |
| UsageCpu | %cpu | CPU 使用率 | o | o | o | o |
| UsageMem | %mem | 内存使用率 | o | o | o | o |
| User | euser | 用户名 | o | o | o | o |
| UserFs | fuser | 文件系统用户名 | o | |||
| UserLogin | -不支持- | 登录用户名 | o | |||
| UserReal | ruser | 实际用户名 | o | o | o | |
| UserSaved | suser | 保存的用户名 | o | o | o | |
| VmData | -不支持- | 数据大小 | o | o | ||
| VmExe | trs | 文本段大小 | o | o | ||
| VmHwm | -不支持- | 峰值常驻集大小 | o | o | o | |
| VmLib | -不支持- | 库代码大小 | o | |||
| VmLock | -不支持- | 锁定内存大小 | o | |||
| VmPeak | -不支持- | 峰值虚拟内存大小 | o | o | ||
| VmPin | -不支持- | 固定内存大小 | o | o | ||
| VmPte | -不支持- | 页表项大小 | o | |||
| VmRss | rss | 常驻集大小 | o | o | o | o |
| VmSize | vsz | 物理页大小 | o | o | o | o |
| VmStack | -不支持- | 栈大小 | o | o | ||
| VmSwap | -不支持- | 换出的虚拟内存大小 | o | o | ||
| VmTotal | -不支持- | 虚拟内存总大小 | *1 | o | *1 | *1 |
| VoluntaryContextSw | -不支持- | 自愿上下文切换次数 | o | o | ||
| Wchan | wchan | 进程休眠时所在的内核函数 | o | o | ||
| WorkDir | -不支持- | 当前工作目录 | o | o | ||
| WriteByte | -不支持- | 写入存储设备的字节数 | o | o | o | o |
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_percentage | color_000 | 参见 color 列表 | BrightBlue|Blue | 0% - 25% 时的颜色 |
| by_percentage | color_025 | 参见 color 列表 | BrightGreen|Green | 25% - 50% 时的颜色 |
| by_percentage | color_050 | 参见 color 列表 | BrightYellow|Yellow | 50% - 75% 时的颜色 |
| by_percentage | color_075 | 参见 color 列表 | BrightRed|Red | 75% - 100% 时的颜色 |
| by_percentage | color_100 | 参见 color 列表 | BrightRed|Red | 100% 及以上时的颜色 |
| by_state | color_d | 参见 color 列表 | BrightRed|Red | 状态为 D 时的颜色 |
| by_state | color_r | 参见 color 列表 | BrightGreen|Green | 状态为 R 时的颜色 |
| by_state | color_s | 参见 color 列表 | BrightBlue|Blue | 状态为 S 时的颜色 |
| by_state | color_t | 参见 color 列表 | BrightCyan|Cyan | 状态为 T 时的颜色 |
| by_state | color_z | 参见 color 列表 | BrightMagenta|Magenta | 状态为 Z 时的颜色 |
| by_state | color_x | 参见 color 列表 | BrightMagenta|Magenta | 状态为 X 时的颜色 |
| by_state | color_k | 参见 color 列表 | BrightYellow|Yellow | 状态为 K 时的颜色 |
| by_state | color_w | 参见 color 列表 | BrightYellow|Yellow | 状态为 W 时的颜色 |
| by_state | color_p | 参见 color 列表 | BrightYellow|Yellow | 状态为 P 时的颜色 |
| by_unit | color_k | 参见 color 列表 | BrightBlue|Blue | 单位为 K 时的颜色 |
| by_unit | color_m | 参见 color 列表 | BrightGreen|Green | 单位为 M 时的颜色 |
| by_unit | color_g | 参见 color 列表 | BrightYellow|Yellow | 单位为 G 时的颜色 |
| by_unit | color_t | 参见 color 列表 | BrightRed|Red | 单位为 T 时的颜色 |
| by_unit | color_p | 参见 color 列表 | BrightRed|Red | 单位为 P 时的颜色 |
| by_unit | color_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_search | Exact, Partial | Exact | 数字关键字是精确匹配还是部分匹配 |
| nonnumeric_search | Exact, Partial | Partial | 非数字关键字是精确匹配还是部分匹配 |
| logic | And, Or, Nand, Nor | And | 关键字之间的逻辑运算 |
| case | Smart, Insensitive, Sensitive | Smart | 搜索时的大小写敏感设置 |
case
case 用于设置搜索时的大小写敏感程度。
Smart:如果关键字包含大写字母,则进行区分大小写的搜索;否则进行不区分大小写的搜索Insensitive:不区分大小写Sensitive:区分大小写
[display] 区段
[display] 区段定义输出显示选项。
| Key | Value | Default | Description |
|---|---|---|---|
| show_self | true, false | false | 是否显示自身进程( procs ) |
| show_self_parents | true, false | false | 是否显示那些仅以自身进程为子进程的父进程 |
| show_thread | true, false | false | 是否显示线程信息(仅限 Linux) |
| show_thread_in_tree | true, false | true | 是否在树形模式下显示线程信息(仅限 Linux) |
| show_parent_in_tree | true, false | true | 是否在树形模式下显示父进程 |
| show_children_in_tree | true, false | true | 是否在树形模式下显示子进程 |
| show_header | true, false | true | 是否显示表头行 |
| show_footer | true, false | false | 是否显示页脚行 |
| show_kthreads | true, false | true | 是否显示属于 kthread 的进程(仅限 Linux) |
| cut_to_terminal | true, false | true | 是否截断输出行以适应终端输出 |
| cut_to_pager | true, false | false | 是否截断输出行以适应分页器 |
| cut_to_pipe | true, false | false | 是否截断输出行以适应管道 |
| color_mode | Auto, Always, Disable | Auto | 未使用 --color 命令行选项时输出颜色的默认行为 |
| separator | [String] | │ | 用作分隔符的字符串 |
| ascending | [String] | ▲ | 升序排序指示符 |
| descending | [String] | ▼ | 降序排序指示符 |
| tree_symbols | [String; 5] | [│, ─, ┬, ├, └] | 树形视图使用的符号 |
| abbr_sid | true, false | true | 是否缩写计算机 SID(仅限 Windows) |
| theme | Auto, Dark, Light | Auto | 默认主题 |
如果 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 | 用于排序的列号 |
| order | Ascending, Descending | Ascending | 排序顺序 |
如果 column 为 0,则按左侧列的值排序。
[docker] 部分
[docker] 部分定义与 docker 守护进程通信的方式。
| 键 | 值 | 默认值 | 描述 |
|---|---|---|---|
| path | [Path] | unix:///var/run/docker.sock | 连接到 docker 守护进程的 UNIX 域套接字 |
[pager] 部分
[pager] 部分定义分页器的行为。
| 键 | 值 | 默认值 | 描述 |
|---|---|---|---|
| mode | Auto, Always, Disable | Auto | 未使用 --pager 命令行选项时分页器的默认行为 |
| detect_width | true, false | false | auto 模式是否检测终端宽度溢出 |
| use_builtin | true, false | false | 是否使用内置分页器 |
| command | [Command] | less -SR | 分页器命令 |
如果 mode 为 Auto,则仅当输出行数超过终端高度时才使用分页器。
默认分页器为 less -SR(如果找不到 less,则使用 more -f)。