![为什么新 PID 命名空间中的 PID 不连续](https://linux22.com/image/191065/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%96%B0%20PID%20%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4%E4%B8%AD%E7%9A%84%20PID%20%E4%B8%8D%E8%BF%9E%E7%BB%AD.png)
我运行的是 Ubuntu 20.04。根据https://lwn.net/Articles/531419/和https://stackoverflow.com/questions/3446727/how-does-linux-define-the-next-pid/3457108#3457108,分配的 PID 应该是连续的。然而,我新创建的 PID 命名空间的情况并非如此,其中第一个进程的 PID 为 1(理应如此),下一个进程的 PID 为 8。奇怪的是,PID 8 之后的每个 PID 都是按顺序分配的。
$ sudo unshare --fork --pid --mount-proc bash
root@anon:/home/anon# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 9844 3840 pts/2 S 12:13 0:00 bash
root 8 0.0 0.0 11500 3364 pts/2 R+ 12:13 0:00 ps aux
之后的其他进程被分配为 9, 10, 11 ...
我很好奇为什么最初从 1 跳到 8?如果有其他进程在运行之前被创建和终止,ps aux
并且占用 PID 2-7,我如何查看这些进程是什么?我尝试查看/var/log/syslog
但找不到任何有用的东西。
答案1
我很好奇为什么最初从 1 跳到 8?
当您以交互模式启动 Bash 时,会在给出提示之前读取并执行rc 文件( ~/.bashrc
,~/.profile
如果是登录 shell,以及 中的相应系统范围文件)。/etc
如果您执行bash --norc
这些 rc 文件,则不会执行,并且您的ps
命令将具有预期的 PID 2。
如果在运行 ps aux 之前创建和终止了占用 PID 2-7 的其他进程,我如何查看这些进程是什么?
执行bash -x