我的linux bash $$与/ proc/self链接不匹配?

Hin*_*sum 1 linux bash pid process proc

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

$echo $$
50040

$ls -ld /proc/self
lrwxrwxrwx 1 root root 64 Jan 22 15:25 /proc/self -> 22485
Run Code Online (Sandbox Code Playgroud)

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

Fre*_*red 5

发出ls命令时看到的PID是命令的PID ls,而不是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
Run Code Online (Sandbox Code Playgroud)

如果要获取shell的PID,则需要确保/proc/self在shell运行时使用,而不是其中一个子进程:

cd /proc/self ; pid=$(awk '{print $1}' stat) ; cd -
Run Code Online (Sandbox Code Playgroud)

(这cd是一个bash内部命令,因此,在您访问的位置/proc/self,您仍然在shell进程中运行).