如何重定向 linux 中的 ps 命令以查看 /proc 以外的其他文件夹

how to redirect ps command in linux to look into other folder than /proc

我正在使用 docker 容器,并且我已将主机 /proc 挂载到容器 /host/proc。现在我希望 ps 容器内的 docker 命令在 /host/proc 而不是 /proc 中查找进程。 或者我怎样才能正确使用与 ps

类似的实用程序

/proc 路径在 /bin/ps 二进制文件的源树中被硬编码。 因此,您需要重新编译/bin/ps

按照这些步骤在装载主机 /proc 的容器内重新编译 /bin/ps 并使用这个新的 ps 显示来自 docker 主机的进程列表容器:

在这个例子中,我没有使用/host/proc而是/prod,以避免修改procfs文件系统挂载点的路径长度(增加路径长度可以在某些情况下触发 运行时间错误。 我也使用基于 OpenSUSE Leap 42.1 的容器,因为您没有描述您正在使用的基础映像。

1- 在 docker 主机上,首先下载 /bin/ps 来源:

fenyo@myhost# mkdir /root/git
fenyo@myhost# cd /root/git
fenyo@myhost# git clone https://gitlab.com/procps-ng/procps.git
fenyo@myhost# cd procps

2- 将 **/*.c

中出现的任何 "/proc 替换为 "/prod

3- 运行 你的 docker 容器,在容器 /prod 上安装 procfs

fenyo@myhost# docker run -v /proc:/prod -v /root/git/procps:/root/git/procps -t -i --rm opensuse:42.1 bash

4-在docker容器内,重新编译/bin/ps

bash-4.2# cd /root/git/procps
bash-4.2# zypper install -y gettext gettext-tools autoconf libtool pkg-config gcc make
bash-4.2# ./autogen.sh
bash-4.2# ./configure --without-ncurses
bash-4.2# make

现在,您可以使用 /root/git/procps/ps/pscommand 来替代 /bin/ps,以便使用 /prod 而不是 /proc。使用 pscommand,您将从主机而不是容器获取进程列表:

bash-4.2# ps -auxgww
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  20064  3076 ?        Ss   23:20   0:00 bash
root      5199  0.0  0.0  33340  2996 ?        R+   23:24   0:00 ps -auxgww

bash-4.2# /root/git/procps/ps/pscommand -auxgww
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  33620  3956 ?        Ss   Jul03   1:13 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root         2  0.0  0.0      0     0 ?        S    Jul03   0:01 [kthreadd]
root         3  0.0  0.0      0     0 ?        R    Jul03   4:44 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   Jul03   0:01 [kworker/0:0H]
root         7  0.0  0.0      0     0 ?        S    Jul03  15:27 [rcu_preempt]
root         8  0.0  0.0      0     0 ?        S    Jul03   0:00 [rcu_sched]
root         9  0.0  0.0      0     0 ?        S    Jul03   0:00 [rcu_bh]
root        10  0.0  0.0      0     0 ?        S    Jul03  10:02 [rcuop/0]
root        11  0.0  0.0      0     0 ?        S    Jul03   0:00 [rcuos/0]
root        12  0.0  0.0      0     0 ?        S    Jul03   0:00 [rcuob/0]
root        13  0.0  0.0      0     0 ?        S    Jul03   0:06 [migration/0]
root        14  0.0  0.0      0     0 ?        S    Jul03   0:07 [watchdog/0]
root        15  0.0  0.0      0     0 ?        S    Jul03   0:06 [watchdog/1]
root        16  0.0  0.0      0     0 ?        S    Jul03   0:04 [migration/1]
root        17  0.0  0.0      0     0 ?        S    Jul03   1:07 [ksoftirqd/1]
root        19  0.0  0.0      0     0 ?        S<   Jul03   0:00 [kworker/1:0H]
root        20  0.0  0.0      0     0 ?        S    Jul03   2:42 [rcuop/1]
root        21  0.0  0.0      0     0 ?        S    Jul03   0:00 [rcuos/1]
root        22  0.0  0.0      0     0 ?        S    Jul03   0:00 [rcuob/1]
root        23  0.0  0.0      0     0 ?        S    Jul03   0:05 [watchdog/2]
root        24  0.0  0.0      0     0 ?        S    Jul03   0:06 [migration/2]
root        25  0.0  0.0      0     0 ?        S    Jul03   0:48 [ksoftirqd/2]
root        27  0.0  0.0      0     0 ?        S<   Jul03   0:00 [kworker/2:0H]
root        28  0.0  0.0      0     0 ?        S    Jul03   7:32 [rcuop/2]
root        29  0.0  0.0      0     0 ?        S    Jul03   0:00 [rcuos/2]
root        30  0.0  0.0      0     0 ?        S    Jul03   0:00 [rcuob/2]
root        31  0.0  0.0      0     0 ?        S    Jul03   0:05 [watchdog/3]
root        32  0.0  0.0      0     0 ?        S    Jul03   0:05 [migration/3]
root        33  0.0  0.0      0     0 ?        S    Jul03   0:37 [ksoftirqd/3]
[...]