我不是一个熟练的 Linux 用户,但我想更好地理解这篇文章中关于 Linux 命名空间的内容
https://stackoverflow.com/questions/44666700/unshare-pid-bin-bash-fork-cannot-allocate-memory
我想我的理解失败可能与对“命令”、“过程”以及其他一些内容的理解不足有关。
首先,让我解释一下我用于学习的一个简单实验。我打开了两个 PUTTY 终端窗口。在每个窗口上,我都执行了ssh root@[ip of machine]
。现在,我已经与 Linux 机器建立了 2 个 SSH 会话,我开始进行实验。
在第一个窗口中,我执行了以下操作:
root@localhost:~# unshare --pid /bin/bash
bash: fork: Cannot allocate memory
在第二个窗口中,我执行了以下操作:
root@localhost:~# ps -aux | grep unshare
root 58188 0.0 0.0 6480 2284 pts/3 R+ 21:49 0:00 grep --color=auto unshare
以下是我的问题:
第二个窗口没有显示任何 的迹象
unshare --pid /bin/bash
。这是因为/bin/bash
命令或/bin/bash
进程已经终止吗?这就是为什么互联网上许多 Linux 用户建议使用--fork
以便/bin/bash
运行在新创建的命名空间中?接受的答案是这样的:“bash 开始运行后,bash 会 fork 几个新的子进程来做一些事情。”我不明白这句话的意思。所以在第二个终端窗口中,我运行了以下命令:
root@localhost:~# unshare -pf /bin/bash
root@localhost:~# ps -a
PID TTY TIME CMD
58278 pts/2 00:00:00 sudo
58279 pts/2 00:00:00 su
58280 pts/2 00:00:00 bash
58291 pts/2 00:00:00 unshare
58292 pts/2 00:00:00 bash
58299 pts/2 00:00:00 ps
PID 58278 到 PID58299 是不是作者所说的“bash 将分叉几个新的子进程来做一些事情”?