我的 linux bash $$ 不匹配 /proc/self link?

My linux bash $$ doesn't match /proc/self link?

我在 RHEL 5 上并像这样尝试 /proc:

$echo $$
50040

$ls -ld /proc/self
lrwxrwxrwx 1 root root 64 Jan 22 15:25 /proc/self -> 22485

我希望 /proc/self link 到 /proc 的子目录,这是我当前的进程 ID。但是 $$ 显示进程 ID 是 50040,而不是 22485。这是为什么?

您在发出 ls 命令时看到的 PID 是 ls 命令的 PID,而不是 shell 的 PID。如果你连续做很多次,你会发现每次都不一样:

fred> ls -ld /proc/self
lrwxrwxrwx 1 root root 0 Jan 12 13:13 /proc/self -> 5075

fred> ls -ld /proc/self
lrwxrwxrwx 1 root root 0 Jan 12 13:13 /proc/self -> 5076

fred> ls -ld /proc/self
lrwxrwxrwx 1 root root 0 Jan 12 13:13 /proc/self -> 5077

如果你想获得 shell 的 PID,你需要确保当 shell 是 运行 时你使用 /proc/self,而不是其中之一sub-processes:

cd /proc/self ; pid=$(awk '{print }' stat) ; cd -

cd 是一个 bash 内部命令,因此,在您访问 /proc/self 时,您仍然 运行 在 shell 处理本身)。

查看 man proc/proc/self 指的是访问 /proc 文件系统的进程,而不是 shell 的 id(这是 $$ 返回的并且是 [=11= 的父级) ]).