跳到主要内容

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" 开头的格式描述符。例如,hpidhuser 可以用来显示主机上下文中进程的 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")。

请注意,etimestimepodman top 的上下文中可能不是有效的格式描述符。podman top 使用 ps 命令来获取进程信息,因此它支持的是 ps 命令的格式描述符。如果你希望查看进程的启动时间,通常可以使用 startlstart 描述符(如果 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)

历史