podman top - 显示容器的运行进程
摘要
podman top [options] container [format-descriptors]
podman container top [options] container [format-descriptors]
描述
显示容器的运行进程。format-descriptors 是与 ps (1) 兼容的 AIX 格式描述符,但扩展为打印额外的信息,如给定进程的 seccomp 模式或有效功能。描述符可以作为单独的参数传递,也可以作为单个逗号分隔的参数传递。请注意,也可以指定 ps(1) 的选项或标志;在这种情况下,Podman 将回退到在容器命名空间中执行主机上的 ps(1)。如果容器具有 CAP_SYS_PTRACE
功能,那么我们将在容器中执行 ps(1),因此它必须在那里安装。要提取与主机相关的信息,请使用“h*”描述符。例如,podman top $name hpid huser
以在主机上下文中显示进程的 PID 和用户。
选项
--help, -h
打印用法说明
--latest
此选项在 podman top
命令中不可用。
格式描述符
格式描述符允许你自定义 podman top
命令的输出。它们允许你选择显示哪些列,以及列的排序和格式。虽然 podman top
支持一些与 ps
命令兼容的描述符,但它还扩展了这些描述符以显示与容器相关的额外信息。
示例格式描述符
PID
: 显示进程的进程 ID。USER
: 显示进程的用户名。%CPU
: 显示进程使用的 CPU 百分比。%MEM
: 显示进程使用的内存百分比。VSZ
: 显示进程的虚拟内存大小。RSS
: 显示进程的常驻集大小(即物理内存使用量)。STAT
: 显示进程的状态(例如,运行中、睡眠中、僵死等)。START
: 显示进程启动的时间。TIME
: 显示进程使用的总 CPU 时间。COMMAND
: 显示进程的命令行。
自定义输出
你可以通过指定多个格式描述符来自定义 podman top
的输出。例如,要仅显示进程的 PID、用户名和命令行,你可以使用以下命令:
podman top <container> PID USER COMMAND
主机相关信息
如果你想提取与主机相关的信息,可以使用以 "h" 开头的格式描述符。例如,hpid
和 huser
可以用来显示主机上下文中进程的 PID 和用户。
示例
显示指定容器的所有运行进程及其相关信息:
podman top <container>
仅显示指定容器的 PID、用户名和命令行:
podman top <container> PID USER COMMAND
显示指定容器在主机上下文中的 PID 和用户:
podman top <container> hpid huser
*格式描述符
除了 ps (1) 中提到的 AIX 格式描述符外,还支持以下描述符:
args, capbnd, capeff, capinh, capprm, comm, etime, group, hgroup, hpid, huser, label, nice, pcpu, pgid, pid, ppid, rgroup, ruser, seccomp, state, time, tty, user, vsz
capbnd
能力的边界集。有关更多信息,请参阅 capabilities (7)。
capeff
能力的有效集。有关更多信息,请参阅 capabilities (7)。
capinh
能力的可继承集。有关更多信息,请参阅 capabilities (7)。
capprm
能力的允许集。有关更多信息,请参阅 capabilities (7)。
hgroup
容器进程在主机上的对应有效组。
hpid
容器进程的对应主机 PID。
huser
容器进程在主机上的对应有效用户。
label
进程当前的安全属性。
seccomp
进程的安全计算模式(即禁用、严格或过滤器)。有关更多信息,请参阅 seccomp (2)。
state
进程状态码(例如,R 表示 运行中,S 表示 睡眠中)。有关更多信息,请参阅 proc(5)。
stime
进程开始时间(例如,"2019-12-09 10:50:36 +0100 CET")。
请注意,etime
和 stime
在 podman top
的上下文中可能不是有效的格式描述符。podman top
使用 ps
命令来获取进程信息,因此它支持的是 ps
命令的格式描述符。如果你希望查看进程的启动时间,通常可以使用 start
或 lstart
描述符(如果 ps
版本支持的话)。确保查阅你的 ps
版本的 man 页面以获取准确可用的描述符列表。
*示例
默认情况下,podman top
会打印与 ps -ef
类似的数据。
$ podman top f5a62a71b07
USER PID PPID %CPU ELAPSED TTY TIME COMMAND
root 1 0 0.000 20.386825206s pts/0 0s sh
root 7 1 0.000 16.386882887s pts/0 0s sleep
root 8 1 0.000 11.386886562s pts/0 0s vi
可以通过在容器名称或ID之后指定格式描述符作为参数来控制输出。
$ podman top -l pid seccomp args %C
PID SECCOMP COMMAND %CPU
1 filter sh 0.000
8 filter vi /etc/ 0.000
如果指定了未知的描述符,Podman 会回退到在容器命名空间中执行主机上的 ps(1)
。
$ podman top -l -- aux
USER PID PPID %CPU ELAPSED TTY TIME COMMAND
root 1 0 0.000 1h2m12.497061672s ? 0s sleep 100000
注意事项
- 如果容器没有
CAP_SYS_PTRACE
功能,podman top
将无法在容器内执行ps
命令。在这种情况下,它将在主机上执行ps
命令,并尝试在容器的命名空间中获取进程信息。 - 确保
ps
命令在容器内部是可用的,特别是当容器具有CAP_SYS_PTRACE
功能时。
另请参阅
podman ps
: 显示正在运行的容器列表。podman inspect
: 显示容器的详细信息。ps(1)
: 显示当前进程的命令手册页。
podman(1), ps(1), seccomp(2), proc(5), capabilities(7)
历史
- 2018年7月,由 Valentin Rothberg 引入格式描述符。
- 2017年12月,最初由 Brent Baude 整理。