Nếu tôi bắt đầu một quá trình và sau đó xóa nhị phân của nó, tôi vẫn có thể khôi phục nó từ /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
Mặt khác, nếu tôi tự tạo một liên kết tượng trưng, hãy xóa mục tiêu và cố gắng sao chép:
cp: cannot stat ‘sleep’: No such file or directory
/proc
là một giao diện cho kernel. Vì vậy, liên kết tượng trưng này thực sự trỏ đến bản sao được tải trong bộ nhớ, nhưng với một tên hữu ích hơn? Làm thế nào để exe
liên kết hoạt động, chính xác?
proc_exe_link()
trongproc
hệ thống tập tin: lxr.free-electrons.com/source/fs/proc/base.c?v=4.0#L1350