Если я запускаю процесс, а затем удаляю его двоичный файл, я все равно могу восстановить его из /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
С другой стороны, если я сам создаю символическую ссылку, удалите цель и попытайтесь скопировать:
cp: cannot stat ‘sleep’: No such file or directory
/proc
интерфейс к ядру Итак, действительно ли эта символическая ссылка указывает на копию, загруженную в память, но с более полезным именем? Как работает exe
ссылка?
proc_exe_link()
вproc
файловой системе: lxr.free-electrons.com/source/fs/proc/base.c?v=4.0#L1350Согласно справочной странице / proc, в Linux 2.2 и более поздних версиях файл является символической ссылкой, содержащей фактический путь к исполняемой команде. По-видимому, двоичный файл загружается в память и
/proc/[pid]/exe
указывает на содержимое двоичного файла в памяти .С другой стороны, в Linux 2.0 и более ранних версиях,
/proc/[pid]/exe
очевидно, указатель на файл (в файловой системе), который был выполнен.Таким образом, если вы выполняете тот же список команд в Linux 2.0 или более ранней версии, вероятно, вы получите сообщение об ошибке «нет такого файла или каталога».
источник