如果我启动一个进程然后删除它的二进制文件,我仍然可以从/proc/<pid>/exe以下位置恢复它:
$ cp `which sleep` .
$ ./sleep 10m &
[1] 13728
$ rm sleep
$ readlink /proc/13728/exe
/tmp/sleep (deleted)
$ cp /proc/13728/exe ./sleep-copy
$ diff sleep-copy `which sleep` && echo not different
not different
$ stat /proc/13728/exe
File: ‘/proc/13728/exe’ -> ‘/tmp/sleep (deleted)’
Size: 0 Blocks: 0 IO Block: 1024 symbolic link
Run Code Online (Sandbox Code Playgroud)
另一方面,如果我自己创建符号链接,请删除目标并尝试复制:
cp: cannot stat ‘sleep’: No such file or directory
Run Code Online (Sandbox Code Playgroud)
/proc是内核的接口。那么这个符号链接是否实际上指向加载到内存中的副本,但有一个更有用的名称?exe链接究竟是如何工作的?