gpt4 book ai didi

unix - 为什么 ps 在新的 pid 命名空间中显示所有进程?

转载 作者:行者123 更新时间:2023-12-04 16:54:10 24 4
gpt4 key购买 nike

如果我使用 unshare 创建一个新的 PID 命名空间

sudo unshare -pf /bin/sh

并运行 ps ux,
# ps ux | head 
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 160536 9968 ? Ss 11:37 0:18 /sbin/init splash
root 2 0.0 0.0 0 0 ? S 11:37 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? I< 11:37 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? I< 11:37 0:00 [mm_percpu_wq]
root 7 0.0 0.0 0 0 ? S 11:37 0:00 [ksoftirqd/0]
root 8 0.1 0.0 0 0 ? I 11:37 1:07 [rcu_sched]
root 9 0.0 0.0 0 0 ? I 11:37 0:00 [rcu_bh]
root 10 0.0 0.0 0 0 ? S 11:37 0:00 [migration/0]
root 11 0.0 0.0 0 0 ? S 11:37 0:00 [watchdog/0]

它显示了所有正在运行的进程,包括根命名空间中的进程。
但是,新命名空间中的当前进程的PID为1,并且与ps输出中的PID 1不是同一个进程。
# echo $$
1

新命名空间中的进程不应该被隔离吗?

最佳答案

我不能给你一个很好的答案,但关键是当你进入
到一个新的 pid 命名空间,你同时保持在同一个挂载命名空间。

命令 ps 使用/proc 来获取统计信息。/proc 仍然有点相同或几乎相同,因此 ps 读取/proc 并查看有关主机 pid 命名空间的所有信息。要获得理想的情况,您不仅需要创建 pid 命名空间,还需要创建新的挂载命名空间。在这种情况下 ps 将不会显示任何“额外”信息。

好消息是,当您在新的 pid namespace 中工作时,尽管您看到了它,但您无法杀死主机 namespace 中的任何进程。你可以在这里找到更好的解释 - https://josephmuia.ca/2018-09-19-ps-proc-and-the-pid-namespace/

关于unix - 为什么 ps 在新的 pid 命名空间中显示所有进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61641935/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com