如何在 alpine 中使用 ps 命令获取特定 PID 的进程名称

How can I get process name of specific PID with ps command in alpine

以ubuntu为基础docker/os

$ ps 
PID   USER     TIME   COMMAND
    1 postgres   0:00 postgres
   47 postgres   0:00 postgres: checkpointer process   
   48 postgres   0:00 postgres: writer process   
   49 postgres   0:00 postgres: wal writer process   
   50 postgres   0:00 postgres: autovacuum launcher process   
   51 postgres   0:00 postgres: stats collector process   
   52 postgres   0:00 postgres: bgworker: logical replication launcher

现在如果运行 ps -p 1 -o user=,它会得到我PID 1 process USER postgres

$ ps -p 1 -o user=
postgres

这就是我在 ubuntu 中可以做的 image/os

现在

我真的在寻找一种方法来为基于 alpine 的图像做同样的事情。我可以在哪里 运行 ps 命令获取 PID 1 进程 USER.

我没有找到任何 docs/hints。

默认情况下,alpine 图像中有 ps 的非常切割版本。是busybox一:

/ # ps --help
BusyBox v1.27.2 (2017-12-12 10:41:50 GMT) multi-call binary.

Usage: ps [-o COL1,COL2=HEADER]

Show list of processes

    -o COL1,COL2=HEADER Select columns for display

它只能显示具有定义列的输出。

如果你想使用uncut ps,你需要先将它安装到alpine image:

/ # apk add --no-cache procps
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
(1/6) Installing libintl (0.19.8.1-r1)
(2/6) Installing ncurses-terminfo-base (6.0_p20171125-r0)
(3/6) Installing ncurses-terminfo (6.0_p20171125-r0)
(4/6) Installing ncurses-libs (6.0_p20171125-r0)
(5/6) Installing libproc (3.3.12-r3)
(6/6) Installing procps (3.3.12-r3)
Executing busybox-1.27.2-r7.trigger
OK: 13 MiB in 17 packages

现在,您可以随意使用它了:

/ # ps -p 1 -o user=
root