我的 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= 的父级) ]).
我在 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= 的父级) ]).