/proc/self 和 /proc/$$ 之间有什么区别?

pet*_*ang 4 linux bash shell

我曾经认为这 /proc/self/proc/$$bash 终端是一样的,但现在我发现它们是不同的。

我知道$$意味着当前进程的 pid,并且/proc/self是当前正在运行的进程,它应该是 bash 终端。为什么它们不同?

root@VM-73-203-debian:~# echo $$
24415
root@VM-73-203-debian:~# ls -l /proc/self
lrwxrwxrwx 1 root root 0 Nov 22  2018 /proc/self -> 24465
root@VM-73-203-debian:~# ls -l /proc/$$
total 0
dr-xr-xr-x 2 root root 0 May 29 16:23 attr
...
Run Code Online (Sandbox Code Playgroud)

rod*_*igo 7

$$ 是一个特殊的 bash 变量,它被扩展为 shell 的 pid。

/proc/self是到进行调用的进程的子目录的真正符号链接/proc/

当你执行ls /proc/$$shell 时,它会扩展它ls /proc/pid-of-bash,这就是你看到的 shell 进程的内容。

但是当你这样做时,你会ls /proc/self看到这个短暂ls过程的内容。

$$不限于这种用法,你可以写echo $$,看bash的PID; 你可以用它来自杀等等。