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

时间:2017-07-27 19:10:34

标签: linux ubuntu docker ps

我使用的是docker容器,我已将host / proc挂载到container / host / proc。现在我想在docker容器中使用ps命令来查找/ host / proc而不是/ proc的进程。 或者我怎样才能将类似的实用程序改为ps

1 个答案:

答案 0 :(得分:2)

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

按照以下步骤在安装主机/bin/ps的容器内重新编译/proc,并使用此新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-在** / *中替换任何"/proc "/prod的出现.c

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]
[...]